【问题标题】:Python tkinter label won't change at beginning of functionPython tkinter 标签在函数开始时不会改变
【发布时间】:2010-10-16 11:16:54
【问题描述】:

我正在使用 tkinter 和 Python 为将 Excel 文件转换为 CSV 的程序创建用户界面。

我创建了一个标签来充当状态栏,并将 statusBarText 设置为 StringVar() 作为文本变量。 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 语句中,它工作正常,但由于某种原因,它在子进程位于函数顶部时运行之前从未改变。任何帮助将不胜感激。

【问题讨论】:

  • 不要在子进程上使用 shell=True。

标签: python function label tkinter statusbar


【解决方案1】:

由于您在单个方法调用中完成所有这些操作,因此在您启动子进程之前,GUI 永远不会有机会更新。查看 update_idletasks() 调用...

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

w.update_idletasks() 一些更新显示的任务,例如调整大小和重绘小部件,被称为空闲任务,因为它们通常被推迟到应用程序完成事件处理并返回主循环以等待新事件。
如果您想在应用程序下一次空闲之前强制更新显示,请在任何小部件上调用 w.update_idletasks() 方法。

【讨论】:

  • 嗨,由于某种原因,这似乎工作了一次,但在下一次“更新”时,w.update_ideltasks() 似乎不起作用。我到底要在哪里插入这段代码?谢谢
【解决方案2】:

您是如何创建标签的? 我有这个小测试设置:

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()”吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    相关资源
    最近更新 更多