Hallo Pythom-Forum,
bin neu hier und auch ein ziemlicher Newbie in Python. Ich habe folgendes Problem: ich will für die Realisierung einer GUI Fotos importieren. Unser Dozent hat dazu einfach
self.photoxyz=PhotoImage(file="xyz.gif")
verwendet. Aber hier zu Hause auf meinem Rechner funzt das nicht. Ansich ja auch kein Wunder, es wird ja überhaupt kein Pfad angegeben. Allerdings hat die genaue Angabe eines Pfades auch nicht geholfen. Hat Python einen bestimmten Default-Folder aus dem es solche Elemente autamatisch ziehen will oder wie geht das?
danke für jede hilfe!
Import von Fotos
In solchen Fällen kann man meistens davon ausgehen, dass der aktuelle Pfad genommen wird, wenn nichts weiter angegeben ist. Wichtiger ist doch, wo `PhotoImage` herkommt, oder hast du das drauf?
-
- User
- Beiträge: 10
- Registriert: Samstag 9. Januar 2010, 11:43
Hey! Danke erstmal für eure Antworten.
@numerix: Ja, die Mutterklasse TkInter ist gleich zu Beginn importiert worden!
@snafu:
So sieht der Rechner bisher aus...Seh ich das richtig, oder ist die Klasse PhotoImage nirgends initialisiert worden?
Edit (BlackJack): Quelltext in code-Tags gesetzt.
@numerix: Ja, die Mutterklasse TkInter ist gleich zu Beginn importiert worden!

@snafu:
Code: Alles auswählen
class Taschenrechner0(Frame):
newtext=""
sum=0
def __init__(self,master=None):
Frame.__init__(self, master)
self.option_add('*Font', 'Courier 18 bold')
self.fenster=root
self.canvas = Canvas(self.fenster, width=1024, height=800)
self.hintergrund = PhotoImage(file="po-taschenrechner-blau-hintergrund-v1.gif")
self.canvas.create_image(0, 0, image=self.hintergrund, anchor=NW)
self.canvas.place(x=2,y=2)
.......
self.photo0enter=PhotoImage(file="poTaschButton0over.gif")
self.photo0init=PhotoImage(file="poTaschButton0default.gif")
self.photo0leave=PhotoImage(file="poTaschButton0default.gif")
self.photo0pressed=PhotoImage(file="poTaschButton0pressed.gif")
self.photo0released=PhotoImage(file="poTaschButton0over.gif")
So sieht der Rechner bisher aus...Seh ich das richtig, oder ist die Klasse PhotoImage nirgends initialisiert worden?
Edit (BlackJack): Quelltext in code-Tags gesetzt.
Also, es ist kein PhotoImage-Problem, sondern ein konzeptionelles Problem, denn so, wie du es gemacht hast, ist es nicht gut gelungen.
Ein paar Aspekte:
- Code künftig in Code-Tags setzen und als Python-Code kennzeichnen
- Tkinter nicht mittels Sternchen importieren
- Taschenrechner0 (warum die Null?) eher Taschenrechner nennen und nicht von Frame ableiten; natürlich geht das, aber logisch passt das nicht.
- Wozu die Klassenvariablen (newtext und sum)? Darauf eher verzichten. Auf den Bezeichner sum sowieso, weil es eine built-in-Funktion gleichen Namens gibt, die du damit überschattest.
- root scheint ein globaler Bezeichner zu sein - der hat in dieser Form in der Methodendefinition nichts zu suchen. Wenn du darauf zugreifen musst (was hier aber gar nicht nötig ist), dann übergib ihn als Parameter.
- wenn Canvas ein Teil des Frames sein soll, dann ist Canvas kein Kind von root, sondern vom Frame selbst, also von self; root wird also überhaupt nicht gebraucht
- der place()-Manager ist ein Verbrechen; vergiss, dass es ihn gibt und verwende den pack-Manager oder - z.B. für die Taschenrechner-Tastatur - den grid-Manager.
- Wenn du wirklich die ganzen PhotoImages brauchst, dann verwalte sie z.B. in einem Dictionary und verwende nicht einen Haufen einzelner Bezeichner
- Das Mischen von dt. und englischen Bezeichnernamen ist hässlich
Könnte jemand den Thread ins Tkinter-Subforum verschieben?
Ein paar Aspekte:
- Code künftig in Code-Tags setzen und als Python-Code kennzeichnen
- Tkinter nicht mittels Sternchen importieren
- Taschenrechner0 (warum die Null?) eher Taschenrechner nennen und nicht von Frame ableiten; natürlich geht das, aber logisch passt das nicht.
- Wozu die Klassenvariablen (newtext und sum)? Darauf eher verzichten. Auf den Bezeichner sum sowieso, weil es eine built-in-Funktion gleichen Namens gibt, die du damit überschattest.
- root scheint ein globaler Bezeichner zu sein - der hat in dieser Form in der Methodendefinition nichts zu suchen. Wenn du darauf zugreifen musst (was hier aber gar nicht nötig ist), dann übergib ihn als Parameter.
- wenn Canvas ein Teil des Frames sein soll, dann ist Canvas kein Kind von root, sondern vom Frame selbst, also von self; root wird also überhaupt nicht gebraucht
- der place()-Manager ist ein Verbrechen; vergiss, dass es ihn gibt und verwende den pack-Manager oder - z.B. für die Taschenrechner-Tastatur - den grid-Manager.
- Wenn du wirklich die ganzen PhotoImages brauchst, dann verwalte sie z.B. in einem Dictionary und verwende nicht einen Haufen einzelner Bezeichner
- Das Mischen von dt. und englischen Bezeichnernamen ist hässlich
Könnte jemand den Thread ins Tkinter-Subforum verschieben?
-
- User
- Beiträge: 10
- Registriert: Samstag 9. Januar 2010, 11:43
Mit all dem hast du wahrscheinlich Recht! Nur bin ich wie gesagt ein Anfänger und mein derzeitiges Problem (nämlich externe Fotos zu importieren) lässt sich durch diese Hinweise leider nicht lösen...Zumindest verstehe ich nicht, weshalb der Import nicht funktioniert.
Was ist denn dein Ziel? Willst du anständig programmieren lernen mit der mittelfristigen Aussicht, dass du mit Freude an der Sache erfolgreich aus eigener Kraft Programme entwickeln kannst? Oder willst du einfach irgendwie was zusammenfrickeln, aus Codeschnipseln anderer zusammengebastelt, die Hälfte nicht verstanden, aber "Hauptsache es läuft"?zwergenaufstand hat geschrieben:Mit all dem hast du wahrscheinlich Recht! Nur bin ich wie gesagt ein Anfänger und mein derzeitiges Problem (nämlich externe Fotos zu importieren) lässt sich durch diese Hinweise leider nicht lösen...Zumindest verstehe ich nicht, weshalb der Import nicht funktioniert.
Es ist in obigem Code fast nichts zu ändern, damit letztgenanntes zutrifft - die Verwendung von PhotoImage ist nicht falsch. Ich zumindest möchte aber nicht dazu beitragen, dass du die Lauffähigkeit des so geänderten Codes dann als Erfolg (egal ob als meinen oder deinen) verbuchst, weil es nämlich keiner ist. Denn auch wenn es läuft: Es ist einfach schlecht gemacht! Also: Nimm dir Zeit und arbeite dich zunächst einmal durch ein Tkinter-Tutorial durch (z.B. das hier: http://infohost.nmt.edu/tcc/help/pubs/tkinter/) und geh die Sache dann nochmal neu an.
Anständig zu programmieren lernt man nicht von heute auf morgen. Das ist mit Arbeit verbunden ...
Hallo zwergenaufstand
Willkommen in unserem Forum.
Kannst du das folgende Skript einmal ausprobieren?:
Die Datei "po-taschenrechner-blau-hintergrund-v1.gif" für das Hintergrundbild würde ich vorläufig im gleichen Verzeichnis wie dein Pythonskript ablegen.
Gruss wuf
Willkommen in unserem Forum.
Kannst du das folgende Skript einmal ausprobieren?:
Code: Alles auswählen
import Tkinter as tk
class Taschenrechner0(tk.Frame):
newtext = ""
sum = 0
def __init__(self,master=None):
tk.Frame.__init__(self, master)
self.pack(expand='yes')
self.hintergrund = tk.PhotoImage(
file="po-taschenrechner-blau-hintergrund-v1.gif")
self.canvas = tk.Canvas(self, width=1024, height=800)
self.canvas.pack()
self.canvas.create_image(0, 0, image=self.hintergrund, anchor=tk.NW)
#self.photo0enter = tk.PhotoImage(file="poTaschButton0over.gif")
#self.photo0init = tk.PhotoImage(file="poTaschButton0default.gif")
#self.photo0leave = tk.PhotoImage(file="poTaschButton0default.gif")
#self.photo0pressed = tk.PhotoImage(file="poTaschButton0pressed.gif")
#self.photo0released = tk.PhotoImage(file="poTaschButton0over.gif")
fenster = tk.Tk()
taschenrechner = Taschenrechner0(fenster)
fenster.mainloop()
Gruss wuf

Take it easy Mates!