Seite 1 von 1

Funktion aufrufen --> Anfängerproblem

Verfasst: Montag 21. August 2006, 15:13
von gorba
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?

Verfasst: Montag 21. August 2006, 15:40
von Python 47
Ähm so wie du ganz normal eine Klasse aufrufen würdest und dann die Funktion der Klasse...

Verfasst: Montag 21. August 2006, 16:54
von CM
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

Re: Funktion aufrufen --> Anfängerproblem

Verfasst: Montag 21. August 2006, 16:57
von 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()
    # ...

Verfasst: Dienstag 22. August 2006, 07:46
von gorba
=) 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

Re: Funktion aufrufen --> Anfängerproblem

Verfasst: Dienstag 22. August 2006, 11:11
von Michael Schneider
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