如何在.mainloop()之后保持程序运行?

时间:2017-12-08 18:53:44

标签: python tkinter

我正在尝试创建一个使用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')

2 个答案:

答案 0 :(得分:4)

mainloop需要是最后一行逻辑代码。还应在Tk对象上调用mainloop,在您的情况下window

为了让您的代码能够运行,您需要在print之前移动sleepmainloop语句,或者将它们移动到函数中,然后再调用该函数主循环。

值得注意的是,在Tkinter中,您可以使用after作为时间而不是sleep

答案 1 :(得分:3)

Tkinter是事件驱动的。这意味着必须有一个动作(来自脚本或用户)给tkinter改变的东西。

mainloop()函数执行窗口,因此没有替代方法。幸运的是有解决方案:

如果您想与tkinter窗口一起执行操作,您有两个选择:

您可以在调用mainloop()之前执行所有操作。

或者当用户以按钮等形式执行操作时使它们执行。

或者您可以使用threadingmultiprocessing在后台运行功能。

如果您选择此选项,我建议使用线程,因为:

  • 易于使用
  • 您可以在脚本的不同部分之间进行通信。您可能很难在多线程中执行此操作

然而,这完全取决于具体任务。

<小时/> 在示例代码中,您给出的最佳选择是在执行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()之前的任何地方。