Seite 1 von 1

ttk.Button reagiert nicht

Verfasst: Mittwoch 3. September 2025, 11:57
von Oldie59
Hallo,

ich benutze tkinter erst seit Kurzem und habe mir dazu auf Youtube einige Videos angesehen. Für meine Anwendung möchte ich mir nun eine eigene GUI bauen. Ich scheitere aber schon bei einem tkk.Button (das Erstellen eines Labels funktioniert einwandfrei). Der Button wird zwar auf der Oberfläche dargestellt, reagiert aber nicht auf das Anklicken (keine print-Ausgabe in der shell).
Auch das Argument 'padding' funktioniert nicht wie erwartet: es wird nicht der Abstand zum Fensterrand eingestellt, sondern der Button vergrössert sich in x und y.
Meine Anwendung läuft auf einem Raspberry Pi4 und Thonny.
Kann mir jemand einen Tipp geben, woran das liegen kann?

Mein Code:
import tkinter as tk
from tkinter import ttk
root = tk.TK()
root.geomentry("400x400")

def button_pressed():
print("gedrückt")

mybutton = ttk.Button(root, state="normal",text="Testbutton",command=button_pressed)
mybutton.pack()
root.mainloop()

Vielen Dank für die Hilfe im Voraus!

Re: ttk.Button reagiert nicht

Verfasst: Freitag 5. September 2025, 08:26
von Dennis89
Hallo,

kopiere mal direkt den Code, den du ausführst hier ins Forum. Am besten noch in Code-Tags (siehe vollständiger Editor). So läuft er Code nämlich gar nicht. Wenn man dann `Tk` und `geometry` schreibt, dann läuft er und macht auch was du erwartest.


Grüße
Dennis

Re: ttk.Button reagiert nicht

Verfasst: Freitag 5. September 2025, 08:48
von __blackjack__
@Oldie59: Quelltext bitte in Code-Tags setzen, damit die Einrückung erhalten bleibt. Das ist im vollständigen Editor die Schaltfläche mit der Aufschrift „</>“.

Zu `padding` steht in der Dokumentation „Specify the element’s interior padding.“ (Hervorhebung von mir). Du suchst wahrscheinlich `margin`: „Specifies the elements exterior padding.“

Auf Modulebene sollte nur Code stehen, der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Besonders unübersichtlich wird es wenn man Hauptprogramm und Funktions-/Klassendefinitionen vermischt.

Wenn es im `tkinter`-Modul eine Konstante für Zeichenketten mit einer besonderen Bedeutung als Argument gibt, sollte man die verwenden. Dann bekommt man Tippfehler um die Ohren gehauen und der Leser weiss, dass das nicht irgendeine beliebige Zeichenkette ist an der Stelle. Also hier ``tk.NORMAL`` statt ``"normal"``. Allerdings braucht man dieses Argument nicht wirklich denn NORMAL ist der Normalzustand den man bekommt wenn man kein `state` angibt.

Die Vorsilbe `my` macht in 99,99% der Fälle keinen Sinn. Wenn es nicht auch einen `our_button` oder `their_button` gibt, von dem man `my_button` abgrenzen muss, ist das einfach nur `button`. Falls man das Objekt danach nicht mehr benötigt, kann man auch einfach gar keinen Namen vergeben.

Code: Alles auswählen

#!/usr/bin/env python3
import tkinter as tk
from tkinter import ttk


def on_button_press():
    print("gedrückt")


def main():
    root = tk.Tk()
    root.geometry("400x400")

    ttk.Button(root, text="Testbutton", command=on_button_press).pack()

    root.mainloop()


if __name__ == "__main__":
    main()

Re: ttk.Button reagiert nicht

Verfasst: Freitag 5. September 2025, 18:38
von Oldie59
Hallo blackjack,

habe den Code jetzt nochmal neu genauso geschrieben, wie oben. Einrückung 4 Leerzeichen, keine Tabs. Ich sehe den button, aber er hat nach wie vor keine Reaktion. Ich kann mit der Tab-Taste den Fokus auf den Button setzen, aber auf ein Mausklick reagiert er trotzdem nicht.
Habe auch schon eine andere Maus an einem anderen USB-Anschluss des RPi4 angeschlossen. Bringt aber leider auch nichts. Bin jetzt ziemlich ratlos.

Deinen Hinweis mit mit dem Inhalt im Modul werde ich berücksichtigen, habe gerade erst mit Python/tkinter angefangen.

Re: ttk.Button reagiert nicht

Verfasst: Freitag 5. September 2025, 19:20
von Sirius3
Startest du das Programm aus irgendeiner IDE heraus? wenn Ja versuche es mal direkt über die Konsole.

Re: ttk.Button reagiert nicht

Verfasst: Sonntag 7. September 2025, 09:10
von Oldie59
Hallo,

ein erster Erfolg! Normalerweise starte ich ein Python-Programm immer in Thonny mit dem RUN-Button. Und da funktioniert der ttk-Button nicht. Wenn ich meine GUI in der Raspberry-Konsole starte, funktioniert der Button-Klick. Mit jedem Klick wird, wie erwartet, in einer neuen Zeile der Text "gedrückt" ausgegeben.
Grundsätzlich könnte ich damit leben. Anwenderfreundlicher wäre für mich natürlich, wenn ich die Datei aus Thonny heraus starten könnte.

Re: ttk.Button reagiert nicht

Verfasst: Sonntag 7. September 2025, 10:14
von __blackjack__
Also bei mir funktioniert das in Thonny. Der Text erscheint dort in der Shell:
Bild

Ansonsten kann man das ja auch von Thonny aus direkt in einem Terminalfenster starten, entweder aus dem Menü oder über die zugeordnete Tastenkombination.

Re: ttk.Button reagiert nicht

Verfasst: Montag 8. September 2025, 07:59
von Oldie59
Hallo,

ich habe jetzt Thonny auf meinem Windows-Rechner installiert und damit funktioniert der Button-Klick. Liegt die Ursache nun an meinem Raspberry?

Re: ttk.Button reagiert nicht

Verfasst: Montag 8. September 2025, 08:41
von __blackjack__
@Oldie59: Wohl eher nicht, ich habe das Bildschirmfoto auf einem Linuxrechner gemacht.