簡體   English   中英

tkinter讀取按鈕狀態

[英]tkinter read button state

我有一個按鈕,通常在按下該按鈕時可以打印一行數據-該部分工作正常。 如果另一個選項(復選框)處於打開狀態,則應連續打印數據,直到再次按下該按鈕為止。 因此,我將其標簽更改為“停止”,然后等待按鈕狀態從NORMAL變為ACTIVE。 但是,循環永遠不會執行。 以下是相關代碼:

self.read_button = Button(master, text='Read Data', command=read_data)
.
.
def read_data(self):
    if self.continuous.get()==1:
        self.read_button['text']='Stop'
        self.read_button['command']=None
        self.read_button.update_idletasks()
        # The data is never printed.
        while self.read_button['state']==NORMAL:
            print_data()
        self.read_button['text']='Read Data'
        self.read_button['command']=read_data
    else:
        print_data()

謝謝你的幫助。 這看起來很簡單。

一般來說,Tkinter在while循環中表現不佳。 您的所有功能都需要及時結束,以便Tkinter可以完成其任務,例如重新繪制窗口並檢查用戶是否單擊/鍵入了任何內容。 如果輸入無限循環,則UI將凍結並停止響應用戶輸入。 如果需要連續執行某些操作,則應使用afterafter_idle方法。

例:

from Tkinter import *

def print_data():
    print "printing data..."
    if read_button["text"] == "Stop":
        #call this again in 10 milliseconds
        root.after(10, print_data)

def read_button_clicked():
    read_button.config(command=stop_button_clicked)
    read_button.config(text="Stop")
    print_data()

def stop_button_clicked():    
    read_button.config(command=read_button_clicked)
    read_button.config(text="Read Data")

root = Tk()

read_button = Button(root, text="Read Data", command=read_button_clicked)
read_button.pack()

root.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM