我正在尝试创建一个使用tkinter显示图像的程序。到目前为止我写的代码完美地显示了图像,但是在tkinter窗口关闭之前程序不会继续。我想知道是否有任何函数而不是.mainloop()来保持程序在tkinter窗口旁边运行?任何帮助非常感谢
window = Tk()
canvas1 = Canvas(window,height=600,width=600)
file = PhotoImage(file = 'GoogleDrive.png')
image = canvas1.create_image(300, 300, anchor = CENTER, image = file)
canvas1.pack()
canvas1.mainloop()
print ('\nA: Google Drive')
time.sleep(1)
print ('B: Google Slides')
time.sleep(1)
print ('C: Google Photos')
答案 0 :(得分:4)
mainloop
需要是最后一行逻辑代码。还应在Tk
对象上调用mainloop,在您的情况下window
。
为了让您的代码能够运行,您需要在print
之前移动sleep
和mainloop
语句,或者将它们移动到函数中,然后再调用该函数主循环。
值得注意的是,在Tkinter中,您可以使用after
作为时间而不是sleep
。
答案 1 :(得分:3)
Tkinter是事件驱动的。这意味着必须有一个动作(来自脚本或用户)给tkinter改变的东西。
mainloop()
函数执行窗口,因此没有替代方法。幸运的是有解决方案:
如果您想与tkinter窗口一起执行操作,您有两个选择:
您可以在调用mainloop()
之前执行所有操作。
或者当用户以按钮等形式执行操作时使它们执行。
或者您可以使用threading或multiprocessing在后台运行功能。
如果您选择此选项,我建议使用线程,因为:
然而,这完全取决于具体任务。
<小时/> 在示例代码中,您给出的最佳选择是在执行
mainloop()
之前调用它。例如:
window = Tk()
canvas1 = Canvas(window,height=600,width=600)
file = PhotoImage(file = 'GoogleDrive.png')
image = canvas1.create_image(300, 300, anchor = CENTER, image = file)
canvas1.pack()
print ('\nA: Google Drive')
time.sleep(1)
print ('B: Google Slides')
time.sleep(1)
print ('C: Google Photos')
canvas1.mainloop()
虽然你可以把它放在mainloop()
之前的任何地方。