如何在Python tkinter中使用网格几何体更新标签?
我创建的GUI有一个问题,它包含一个标签,指示程序在后台工作,实际脚本处理大量数据,因此我希望该指示器告诉用户它确实在做一些事情。到目前为止,它工作得很好,在脚本开始时显示“Idle”,在函数运行时显示“running”,在完成时显示“Done”。(代码仅为相关部分): 但是,当GUI因为许多选项而增长时,我从pack切换到grid geometry manager,然后在多次尝试和错误后,我得到的标签更新再次被破坏。以下代码不起作用:如何在Python tkinter中使用网格几何体更新标签?,python,tkinter,label,Python,Tkinter,Label,我创建的GUI有一个问题,它包含一个标签,指示程序在后台工作,实际脚本处理大量数据,因此我希望该指示器告诉用户它确实在做一些事情。到目前为止,它工作得很好,在脚本开始时显示“Idle”,在函数运行时显示“running”,在完成时显示“Done”。(代码仅为相关部分): 但是,当GUI因为许多选项而增长时,我从pack切换到grid geometry manager,然后在多次尝试和错误后,我得到的标签更新再次被破坏。以下代码不起作用: from tkinter import* def mak
from tkinter import*
def make_pause_function(sleepytime):
import time
print("Falling asleep")
time.sleep(sleepytime)
print("Awakening")
class MyGUI:
def __init__(self):
self.__mainWindow = Tk()
self.header = StringVar()
self.header.set(3)
self.labelText = 'Idle'
self.Button2 = Button(text = "Sleep for X seconds!", command = self.run_main_script).grid(row=1,column=0)
self.Entry2 = Entry(self.__mainWindow, textvariable=self.header, width = 100).grid(row=2,column=0)
self.Label3 = Label(self.__mainWindow, text = self.labelText).grid(row=3,column=0)
# self.Button2 = Button(text = "Sleep for X seconds!", command = self.run_main_script)
# self.Entry2 = Entry(self.__mainWindow, textvariable=self.header, width = 100)
# self.Label3 = Label(self.__mainWindow, text = self.labelText)
# self.Button2.pack()
# self.Entry2.pack()
# self.Label3.pack()
mainloop()
def run_main_script(self):
self.Label3["text"] = 'running'
self.__mainWindow.update_idletasks()
header=self.header.get()
make_pause_function(int(header))
self.Label3["text"] = 'done'
self.__mainWindow.update_idletasks()
myGUI = MyGUI()
似乎update_idletasks不喜欢网格。但是我不喜欢有很多按钮和字段的GUI包。有什么方法可以实现网格打包的目的吗?试试以下方法:
self.Label3 = Label(self.__mainWindow, text = self.labelText).grid(row=3,column=0)
从那时起,到现在:
self.Label3 = Label(self.__mainWindow, text = self.labelText)
self.Label3.grid(row=3,column=0)
以下行导致错误:
self.Label3 = Label(self.__mainWindow, text = self.labelText).grid(row=3,column=0)
grid()是一个不返回任何内容(无)的函数。正因为如此,您将保存变量self.Lable3
nothing。然后,当您运行行self.Label3[“text”]=“running”
时,会弹出一个错误,因为self.Lable3
为无。要解决此问题,请将这些行分开-首先将标签保存在变量中,然后对其使用grid()函数:
self.Label3 = Label(self.__mainWindow, text = self.labelText)
self.Label3.grid(row=3,column=0)
顺便说一下,我建议使用place()方法而不是grid(),因为在我看来,使用它放置对象更容易。你可以读到它
self.Label3 = Label(self.__mainWindow, text = self.labelText)
self.Label3.grid(row=3,column=0)