2017-06-03 145 views
0

我有一个python脚本和一个文本文件,其中包含像18:59,19:00,19:02等等的时间(字符串)列表...每个都在不同的行中。我想在文件中的时间是当前时间的情况下更改tkinter中标签的颜色。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() 
+0

什么是'main()'?而所有的功能/线路都被遗漏了。没有看到这些,我们不禁感慨。 – SneakyTurtle

+0

你有'主循环'吗? – Pythonista

+0

@Pythonista是的,我做 – Jake259

回答

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循环在指定的时间到达后每秒都会检查一次后,会有一些延迟。如果有人可以提出一些改进建议,这将非常有帮助。