我有一个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()
答案 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循环在指定的时间到达后每秒都会检查,因此会有一点延迟。如果有人可以提出一些改进,那将非常有用。