Funktion aufrufen --> Anfängerproblem

Fragen zu Tkinter.
Antworten
gorba
User
Beiträge: 100
Registriert: Freitag 28. Juli 2006, 14:58

Hallo, ich habe folgendes (evt. sehr simples) Problem:

Code: Alles auswählen

def RecvData():
	XXX

class GUI(Frame):
	def __init__(self, parent, master=None):
		Frame.__init__(self, master) 
		self.grid()
		Button(root,text="Quit",command=self.quit).pack()
		Button(root,text="Bild",command=self.send_em).pack()

	def show_n(self):
		im = Image.open('test123.jpg')
		im.thumbnail((280, 300), Image.ANTIALIAS)
		self.photo = ImageTk.PhotoImage(im)  # <--
		Label(root, image=self.photo).pack()  # <--
Wie kann ich in der Funktion RecvData mein show_n() aufrufen um ein empfangenes Bild anzuzeigen?
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Ähm so wie du ganz normal eine Klasse aufrufen würdest und dann die Funktion der Klasse...
mfg

Thomas :-)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi gorba,

wüßte nicht wie da irgendetwas funktionieren sollte: Du willst root in __init__ verwendet, aber das ist gar nicht deklariert.
RecvData akzeptiert keine Parameter, aber Deine GUI-Klasse erwartet bei der Erstellung von Objekten ein parent. Das kannst Du natürlich in der RecvData -Funktion erstellen, aber irgendetwas sagt mir, daß Du das nicht tun wirst ;-). Also wenn RecvData eine GUI-Instanz erhält, dann kann sie natürlich GUI-Instanz.show_n() aufrufen.

Ansonsten Poste mal etwas mehr Code, plus Beschreibung - vielleicht kann man Dir ja helfen, wenn Du sagst, was Du eigentlich machen möchtest.

Gruß,
Christian
BlackJack

gorba hat geschrieben:Wie kann ich in der Funktion RecvData mein show_n() aufrufen um ein empfangenes Bild anzuzeigen?
Das GUI Objekt als Argument übergeben und dann ganz einfach die Methode aufrufen.

Code: Alles auswählen

def recieve_data(gui):
    # ...
    gui.show_n()
    # ...
gorba
User
Beiträge: 100
Registriert: Freitag 28. Juli 2006, 14:58

=) Das Problem war der self parameter der mich verwirrt hat. Ich arbeite das erste mal mit klassen etc. (kommer aus der ansi-c Welt.. ) Neu im code:

Code: Alles auswählen

	if(INI == False):
		conf = read_config()
		MASTER = open_serial_device(conf)
	root=Tk()
	root.title("Thumbnail")
	my_class = MyClass(root)
	root.mainloop()
Und mit my_class.show_n() anspechen. Das Funktioniert auf jeden Fall mal. Ob das ganze sauber ist, kann ich noch nicht beurteilen =)

greez
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Salve!
gorba hat geschrieben:

Code: Alles auswählen

def RecvData():
	XXX

class GUI(Frame):
	def __init__(self, parent, master=None):
		Frame.__init__(self, master) 
		self.grid()
		Button(root,text="Quit",command=self.quit).pack()
		Button(root,text="Bild",command=self.send_em).pack()

	def show_n(self):
		im = Image.open('test123.jpg')
		im.thumbnail((280, 300), Image.ANTIALIAS)
		self.photo = ImageTk.PhotoImage(im)  # <--
		Label(root, image=self.photo).pack()  # <--
Ich sehe das nicht zum ersten mal und frage mich nicht zum ersten mal: WARUM werden in Zeile 6 die Parameter "parent" und "master" übergeben (von dem später verwendeten root mal ganz zu schweigen :P).
Wo wird das Argument "parent" denn verwendet? Wenn man

Code: Alles auswählen

gui = GUI(tkRoot)
aufruft, wird das Elternwidget an eben dieses parent übergeben. Werden Objekte vielleicht mit

Code: Alles auswählen

gui = GUI(tkRoot, master = tkRoot)
generiert? Wer kann, der kläre mich bitte auf.

Vielen Dank,
der Michel
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Antworten