Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python tkinter中使用网格几何体更新标签?_Python_Tkinter_Label - Fatal编程技术网

如何在Python tkinter中使用网格几何体更新标签?

如何在Python tkinter中使用网格几何体更新标签?,python,tkinter,label,Python,Tkinter,Label,我创建的GUI有一个问题,它包含一个标签,指示程序在后台工作,实际脚本处理大量数据,因此我希望该指示器告诉用户它确实在做一些事情。到目前为止,它工作得很好,在脚本开始时显示“Idle”,在函数运行时显示“running”,在完成时显示“Done”。(代码仅为相关部分): 但是,当GUI因为许多选项而增长时,我从pack切换到grid geometry manager,然后在多次尝试和错误后,我得到的标签更新再次被破坏。以下代码不起作用: from tkinter import* def mak

我创建的GUI有一个问题,它包含一个标签,指示程序在后台工作,实际脚本处理大量数据,因此我希望该指示器告诉用户它确实在做一些事情。到目前为止,它工作得很好,在脚本开始时显示“Idle”,在函数运行时显示“running”,在完成时显示“Done”。(代码仅为相关部分):

但是,当GUI因为许多选项而增长时,我从pack切换到grid geometry manager,然后在多次尝试和错误后,我得到的标签更新再次被破坏。以下代码不起作用:

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)