Tkinter窗口在运行时关闭

时间:2017-06-03 18:20:53

标签: python tkinter

我有一个python脚本和一个文本文件,其中包含18:59,19:00,19:02等的时间(字符串)列表...每个都在不同的行中。我想在文件中的时间是当前时间时更改tkinter中标签的颜色。

问题是tkinter窗口一旦打开就会关闭,然后一切都完成后再次打开。我尝试使用update_idletasks。但这并没有改变任何事情。这是必需的代码结构:

class gui(Frame):
    def __init__(self, parent, txt2, index):
    Frame.__init__(self,parent,background="white")
    self.parent = parent
    self.txt2 = txt2
    self.index = index
    self.initUI()
    self.initChange()

def initUI(self)
    #initial window with white color label

def initChange(self)
    while(last line hasnt reached):
        if(current time = file time)
            #line for changing label color and self.index++
            self.parent.update_idletasks()
        sleep(30) 

main()
    #call all the functions required and root, txt file and initial index is passed as arguments for gui functions

由于我被要求提供我所使用的所有功能,我这样做但是我省略了细节。代码太长了。

def dataextract(xlsheet):
    #take data from xlsheet
    #called only once in the main() function

def fileio(x, txt1)
    #Write the time list after doing some operations
    #based on data from xlsheet

def main():
    x = datextract(xlsheet)
    fileio(x, txt)
    print "File IO competed..."
    root = Tk()
    app = gui(root, txt2, 0)
    root.mainloop()

if __name__ == "__main__":
    main()

1 个答案:

答案 0 :(得分:0)

经过堆栈溢出和许多其他网站的许多帖子后,我的应用程序运行正常。问题是,python在单个线程上运行。 tkinter窗口最初被分配一个线程,当调用initChange时,线程现在被从tkinter中取走。我所要做的就是在一个单独的线程中调用initChange。为此,

class gui(Frame):
    def __init__(self, parent, txt2, index):
    Frame.__init__(self,parent,background="white")
    self.parent = parent
    self.txt2 = txt2
    self.index = index
    self.initUI()
    thread.start_new_thread(self.initChange,())

但这里有一个小问题。由于我的while循环在指定的时间到达后每秒都会检查,因此会有一点延迟。如果有人可以提出一些改进,那将非常有用。