Buttom als Anzeiger springt aus dem Fenster

Fragen zu Tkinter.
Antworten
Bulli
User
Beiträge: 10
Registriert: Mittwoch 22. Februar 2017, 12:45

Hallo
Bin neu hier als Mitglied (Hab schon länger mitgelesen) und hab da mal eine Frage:
mein Prog stürzt regelmäßig ab (Button springt aus dem Fenster) und außerdem stört mich das Blinken des Button.
Vielleicht hat ja jemand eine Idee oder weiß wie man das besser lösen kann?
Also benutze den Button normalerweise um einen Zustand aus einer SQLlite Datenbank
abzufragen und zuändern.
Cu
Bulli

Code: Alles auswählen

from tkinter import *
import threading
import time

class anzeige(threading.Thread):
    def run(self):    
        while 1:
            def loeschen():
                anzeige0.place_forget()   
            if wert == "TRUE":
                if wert != "TRUE": 
                    loeschen()
                anzeige0 = Button(root, text=" 1 ", bg="green", font=(13), command=a1)
                anzeige0.place(x=10,y=10)               
                time.sleep(0.5)
                loeschen()
                pass

            if wert == "FALSE":
                if wert != "FALSE": 
                    loeschen()
                anzeige0 = Button(root, text=" 0 ", bg="red", font=(13), command=a2)
                anzeige0.place(x=10,y=10)               
                time.sleep(0.5)
                loeschen()
                pass
def a1():
    global wert
    wert = "FALSE"
    print(wert)

def a2():
    global wert
    wert = "TRUE"
    print(wert)
    
wert = "TRUE"
root = Tk()
root.wm_geometry("110x50+10+10")
Anzeige = anzeige(daemon=True)
Anzeige.start()
print(wert)
root.mainloop()
Zuletzt geändert von Anonymous am Mittwoch 22. Februar 2017, 13:50, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@Bulli: GUIs und Threads vertragen sich nicht einfach so. Die GUI darf in der Regel nur aus dem Thread verändert werden, in dem auch die GUI-Hauptschleife läuft. Vergiss am besten Threads und löse das mit der `after()`-Methode auf Tk-Widgets um alle 0.5 Sekunden etwas zu machen.

Das ”blinken” bekommst Du weg in dem Du die Schaltfläche nicht dauernd entfernst und neu erstellst. Erstell die *einmal* am Anfang des Programms und ändere dann nur noch den Text und das `command` von der Schaltfläche. Das geht per Schlüsselzugriff ``widget[option] = value`` oder `config()`-Methode. Damit kann man mehr als eine Widgetoption auf einmal ändern.

Die ``pass``-Anweisungen machen keinen Sinn. Und ``global`` hat in einem sauberen Programm nichts zu suchen.
Bulli
User
Beiträge: 10
Registriert: Mittwoch 22. Februar 2017, 12:45

Ok, danke erstmal für die schnelle Info.
Werde das mal versuchen.
Antworten