Image durch Unterprogramm mit tkinter einbinden

Fragen zu Tkinter.
Antworten
Jonathan
User
Beiträge: 1
Registriert: Montag 6. März 2017, 20:15

Hallo zusammen,

ich benutze python 3 und möchte gerne ein Bild durch ein Unterprogramm (main -> Unterprogramm -> Unterprogramm) in einem Text widget einbinden. Das Programm funktioniert soweit, zumindest wird der Text angezeigt, wenn ich dieses durch meine main-Funktion, dem folgenden Unterprogramm und das weitere Unterprogramm aufrufe. Das eingebundene Bild wird jedoch nicht angezeigt! Wenn ich das Unterprogramm mit dem Bild dirkt von main aus starte, wird alles angezeigt. Was mache ich falsch? Hier die verinfachten Programmzeilen:

main-Zeilen:

Code: Alles auswählen

import setWindow1	#Unterprogram laden

#setWindow-Funktion von Unterprogramm aufrufen
setWindow1.setWindow()
setWindow1-Zeilen:

Code: Alles auswählen

from tkinter import *
import buttonFunctions1	#weiteres Unterprogram laden

def setWindow():
	root =Tk()
	explanationButton = Button(root, text="explanation", command=buttonFunctions1.buttonExplanation).place(x=0, y=10)		#Button erstellen und Funktion hinterlegen
	root.mainloop()

buttonFunctions1-Zeilen:

Code: Alles auswählen

from tkinter import *

def buttonExplanation():
	root = Tk()
	textBox = Text(root, height=20, width=100)
	textBox.insert(END, "test")

	photoConvertMesh1=PhotoImage(file="images/photoOverview.png")	#wenn diese und die nächste Zeile auskomentiert
	textBox.image_create(END, image=photoConvertMesh1) 				# wird, funktioniert das Program
	textBox.pack()
	
	root.mainloop()

Falls ihr eine Idee habt, an was das liegt, oder falls ihr eine Idee habt, wie ich es besser machen kann, bin ich euch sehr dankbar.

Mfg,Jonathan
Zuletzt geändert von Anonymous am Dienstag 7. März 2017, 00:14, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@Jonathan: Es darf immer nur *ein* Tk-Objekt geben. Das ist *das* Hauptfenster. Mehrere Hauptschleifen (`mainloop()`) sollte man in der Regel auch nicht am laufen haben.

Die Namenskonvention bei Python ist übrigens klein_mit_unterstrichen für eigentlich alles ausser Klassen (MixedCase) und Konstanten (ALLES_GROSS). Und dann lass diese unnötigen Nummern bei den Namen weg und verwende aussagekräftigere Namen. Am Namen eines Wertes sollte der Leser erkennen können was er bedeutet und am Namen einer Funktion oder Methode was sie tut. `buttonExplanation` beschreibt nicht wirklich eine Tätigkeit. `buttonFunctions1` ist viel zu generisch. Ein Modul mit dem gleichen Namen wie die Funktion in dem Modul? `setWindow()` weckt beim Leser Erwartungen die nicht erfüllt werden, beziehungsweise verwirrt ein bisschen. `set…()`-Funktionen oder Methoden setzen in der Regel einen Wert in einem Objekt und zeigen kein Fenster an und hängen dann in der GUI-Hauptschleife. Zudem sind Getter- und Setter-Methoden in Python eher selten.
Antworten