我将 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 语句中,它工作正常,但出于某种原因,当它位于函数顶部时,它在子进程运行之前永远不会改变。任何帮助将不胜感激。
最佳答案
由于您是在单个方法调用中完成所有这些操作,因此在您开始子进程之前,GUI 永远没有机会更新。检查 update_idletasks() 调用...
来自 http://infohost.nmt.edu/tcc/help/pubs/tkinter/universal.html
w.update_idletasks()
一些更新显示的任务,例如调整大小和重绘小部件,被称为空闲任务,因为它们通常被推迟到应用程序完成处理事件并返回主循环等待新事件。
如果您想在应用程序下一次空闲之前强制更新显示,请在任何小部件上调用 w.update_idletasks() 方法。
关于Python tkinter 标签不会在函数开始时改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/698707/