繁体   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