Schönen guten Tag an alle aus der Com,
ich versuche grade für mein GUI eine variable zu erschaffen. Ich möchte wenn z.B Button X betätigt wird das IMG X angezeigt wird. Das habe ich auch soweit mit:
def show_image():
image = ImageTk.PhotoImage(file='check-unsel-pressed.png')
imagebox.config(image=image)
imagebox.image = image
imagebox = tk.Label(mainWin)
imagebox.pack()
imagebox.place(x= 140, y= 700)
geschafft. Durch das drücken bleibt aber das Img Y auf dem Display bestehen. Ich möchte, aber das es wenn ich den Butto X nicht mehr drücke, das Image auch wieder verschwindet.
Eine andere möglichkeit wäre: Wenn gedrückt Img Y und wenn nicht gedrückt Img Z.
Bin grad erst ein paar Tage dabei und möchte dadurch z.B Anzeigen das durch eine Funktion z.B es wird gesprochen angezeigt wird das man "Live" ist.
Für eure Hilfe bin ich sehr dankbar.
Mit freundlichen Grüßen
FabiSch
Anfänger: Wenn ich Button X drücke soll Img Y zu sehen sein.
Da der Code nichts von einem Img Y enthält, läßt sich Deine Frage nicht beantworten.
Bitte posten den gesamten Code, der Dein Problem veranschaulicht. Am besten in Code-Tags, damit die Einrückungen auch erhalten bleiben.
Bitte posten den gesamten Code, der Dein Problem veranschaulicht. Am besten in Code-Tags, damit die Einrückungen auch erhalten bleiben.
]Hey, danke für die schnelle Antwort. In dem Fall ist Img Y = 'check-unsel-pressed-png' und sollte durch Img Y einfach nur veranschaulichen was ich meine. Dementsprechend ist es also:
Mehr ist dazu im Code bei mir derzeit nicht drin da ich wie beschrieben die Variable suche.
Code: Alles auswählen
<
# Image Load
def show_image():
image = ImageTk.PhotoImage(file='Img Y')
imagebox.config(image=image)
imagebox.image = image
# Button mit Event Anzeige
button1 = ttk.Button(mainWin, text='Konfiguration', style='Accent.TButton', command=show_image)
button1.place(x=850, y=680,w=100, h=40)
# Image Label
imagebox = tk.Label(mainWin)
imagebox.pack()
imagebox.place(x= 140, y= 700)
Code: Alles auswählen
is_on = True
def button_mode():
global is_on
# Determine it is on or off
if is_on:
button1.config(image=off)
is_on = False
else:
button1.config(image=on)
is_on = True
#Define our Images
on = PhotoImage(file="check-unsel-pressed.png")
off = PhotoImage(file="check-unsel-accent.png")
# Buttons Row 1
button1 = ttk.Checkbutton(mainWin, text='Anruf Bb', style='ToggleButton', command=button_mode)
button1.place(x=150, y=160,w=120, h=40)
- __blackjack__
- User
- Beiträge: 13931
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@FabiSch: Das ist nicht der gesamte Quelltext. Das führt zu einem `NameError` weil mindestens mal die Importe fehlen. Und damit ``style="ToggleButton"`` funktioniert müsste sicher auch noch etwas passieren, denn zumindest bei mir ist das nicht im Standard-Theme enthalten.
``global`` ist keine Lösung, das ist ein Problem. GUI-Programmierung erfordert Klassen wenn man sich Zustand über Aufrufe hinweg merken muss.
Funktionen (und Methoden) werden üblicherweise nach der Tätigkeit benannt die sie durchführen, damit der Leser weis was die machen und um sie leicht von eher passiven Werten unterscheiden zu können. Der Name `button_mode` beschreibt keine Tätigkeit.
Bei `on` und `off` denkt man eher an einen Wahrheitswert oder einen Aufzählungstyp statt an Objekte die Bilder repräsentieren.
Man nummeriert keine Namen. Insbesondere wenn es sowieso nur eine 1 ist, die an diesen einen Namen angehängt ist, macht das ja nocht nicht einmal den Sinn für den Fall, dass man zu faul war sich sinnvolle Namen zu überlegen.
Man benutzt kein `place()`. Das funktioniert nur auf Systemen die genau so oder sehr ähnlich Deiner Bildschirmgrösse und -auflösung und den Einstellungen sind. Auf anderen Systemen kann das von unschön aussehen bis unbenutzbar gehen, wenn Anzeigeelemente oder deren Inhalte nicht passen und sich dann überlappen oder ausserhalb des sichtbaren Fensterbereichs liegen. Und selbst wenn das funktionieren würde, ist es unnötig aufwändig sich um die ganzen Positionen und Grössen selbst kümmern zu müssen, statt das `grid()` oder `pack()` zu überlassen.
So ganz schlau werde ich aus der Frage und dem Code immer noch nicht. Beschreibe doch mal die Problemstellung statt die vermeintliche Lösung.
``global`` ist keine Lösung, das ist ein Problem. GUI-Programmierung erfordert Klassen wenn man sich Zustand über Aufrufe hinweg merken muss.
Funktionen (und Methoden) werden üblicherweise nach der Tätigkeit benannt die sie durchführen, damit der Leser weis was die machen und um sie leicht von eher passiven Werten unterscheiden zu können. Der Name `button_mode` beschreibt keine Tätigkeit.
Bei `on` und `off` denkt man eher an einen Wahrheitswert oder einen Aufzählungstyp statt an Objekte die Bilder repräsentieren.
Man nummeriert keine Namen. Insbesondere wenn es sowieso nur eine 1 ist, die an diesen einen Namen angehängt ist, macht das ja nocht nicht einmal den Sinn für den Fall, dass man zu faul war sich sinnvolle Namen zu überlegen.
Man benutzt kein `place()`. Das funktioniert nur auf Systemen die genau so oder sehr ähnlich Deiner Bildschirmgrösse und -auflösung und den Einstellungen sind. Auf anderen Systemen kann das von unschön aussehen bis unbenutzbar gehen, wenn Anzeigeelemente oder deren Inhalte nicht passen und sich dann überlappen oder ausserhalb des sichtbaren Fensterbereichs liegen. Und selbst wenn das funktionieren würde, ist es unnötig aufwändig sich um die ganzen Positionen und Grössen selbst kümmern zu müssen, statt das `grid()` oder `pack()` zu überlassen.
So ganz schlau werde ich aus der Frage und dem Code immer noch nicht. Beschreibe doch mal die Problemstellung statt die vermeintliche Lösung.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware