Python tkinter标签赢得';t在函数开始时改变
我将tkinter与Python结合使用,为将Excel文件转换为CSV的程序创建一个用户界面 我创建了一个标签作为状态栏,并将statusBarText设置为StringVar()作为textvariable。inputFileEntry和outputFileEntry是包含输入和输出文件路径的文本变量Python tkinter标签赢得';t在函数开始时改变,python,function,label,tkinter,statusbar,Python,Function,Label,Tkinter,Statusbar,我将tkinter与Python结合使用,为将Excel文件转换为CSV的程序创建一个用户界面 我创建了一个标签作为状态栏,并将statusBarText设置为StringVar()作为textvariable。inputFileEntry和outputFileEntry是包含输入和输出文件路径的文本变量 def convertButtonClick(): statusBarText.set('Converting...') if inputFileEntry.get() ==
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!')
当您单击convert按钮时,会调用此函数,并且一切正常,只是状态栏从未更改为“Converting…”
如果输入或输出为空,状态栏文本将更改为无效参数,并根据返回代码更改为成功或失败。问题是它永远不会变为“转换…”
我已经将这一行复制并粘贴到if语句中,它工作得很好,但是由于某些原因,它在子进程运行之前,当它位于函数顶部时,它永远不会改变。非常感谢您的帮助。您是如何创建标签的? 我有一个小测试设置:
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()”?由于所有这些都是在一个方法调用中完成的,因此在启动子进程之前,GUI从来没有机会进行更新。签出更新\u idletasks()调用 从
w.更新idletasks()
更新显示中的某些任务(如调整窗口小部件的大小和重绘窗口小部件)称为空闲任务,因为它们通常被推迟到应用程序完成事件处理并返回主循环以等待新事件。如果要在应用程序下一次空闲之前强制更新显示,请在任何小部件上调用w.update\u idletasks()方法。不要在subprocess.hi上使用shell=True,因为某些原因,这似乎只工作一次,但在下一次“更新”时,w.update\u ideltasks()似乎不工作。我到底要在哪里插入此代码?谢谢