簡體   English   中英

Python tkinter標簽在功能開始時不會改變

[英]Python tkinter label won't change at beginning of function

我正在使用tkinter和Python為將Excel文件轉換為CSV的程序創建用戶界面。

我創建了一個標簽作為狀態欄,並將statusBarText設置為StringVar()作為textvariable。 inputFileEntry和outputFileEntry是包含輸入和輸出文件路徑的文本變量。

def convertButtonClick():
    statusBarText.set('Converting...')

    if inputFileEntry.get() == '' or outputFileEntry.get() == '':
        statusBarText.set('Invalid Parameters.')
        return

    retcode = subprocess.('Program.exe' ,shell=true)

    if retcode == 0:
        statusBarText.set('Conversion Successful!')
    else:
        statusBarText.set('Conversion Failed!')

單擊轉換按鈕時會調用此函數,一切正常,但狀態欄永遠不會更改為“轉換...”。

如果輸入或輸出為空,狀態欄文本將更改為無效參數,並且將根據返回代碼更改為成功或失敗。 問題是它永遠不會改變為'轉換......'

我已經將那條確切的行復制並粘貼到if語句中,並且它工作正常,但由於某種原因,它只是在子進程運行之前永遠不會更改它位於函數頂部。 任何幫助將不勝感激。

由於您在單個方法調用中執行所有這些操作,因此在啟動子進程之前,GUI永遠不會有機會更新。 查看update_idletasks()調用...

來自http://infohost.nmt.edu/tcc/help/pubs/tkinter/universal.html

w.update_idletasks()更新顯示的一些任務w.update_idletasks()例如調整大小和重繪小部件)被稱為空閑任務,因為它們通常被推遲到應用程序完成處理事件並返回主循環以等待新事件。
如果要在應用程序下次空閑之前強制更新顯示,請在任何窗口小部件上調用w.update_idletasks()方法。

你是如何創建標簽的? 我有這個小測試設置:

from Tkinter import *
class LabelTest:

    def __init__(self, master):
        self.test = StringVar()

        self.button = Button(master, text="Change Label", command=self.change)
        self.button.grid(row=0, column=0, sticky=W)

        self.test.set("spam")
        self.testlabel = Label(master, textvariable = self.test).grid(row = 0,column = 1)
    def change(self):

        self.test.set("eggs")



root = Tk()
root.title("Label tester")
calc = LabelTest(root)

root.mainloop()

它有效。 你確定使用“textvariable = StatusBarText”而不是“text = StatusBarText.get()”嗎?

暫無
暫無

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

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