Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在计划运行时退出tkinter窗口?_Python - Fatal编程技术网

Python 如何在计划运行时退出tkinter窗口?

Python 如何在计划运行时退出tkinter窗口?,python,Python,我正在为一些不同的python脚本创建一个调度程序,并使用tkinter窗口接收我正在访问的服务器的用户名和密码 我似乎能够让调度程序工作,但当它工作时,它现在中断了主循环,因此窗口不再响应 我曾尝试将mainloop放入循环中,以保持调度运行,但这会导致调度程序停止运行 将tkinter作为tk导入 导入子流程 进口时间表 导入时间 类主窗口(tk.tk): 定义初始化(自): tk.tk.\uuuuu初始化(self) self.e_user_label=tk.label(self,text

我正在为一些不同的python脚本创建一个调度程序,并使用tkinter窗口接收我正在访问的服务器的用户名和密码

我似乎能够让调度程序工作,但当它工作时,它现在中断了主循环,因此窗口不再响应

我曾尝试将mainloop放入循环中,以保持调度运行,但这会导致调度程序停止运行

将tkinter作为tk导入
导入子流程
进口时间表
导入时间
类主窗口(tk.tk):
定义初始化(自):
tk.tk.\uuuuu初始化(self)
self.e_user_label=tk.label(self,text=“电子邮件用户名”)
self.e_pw_label=tk.label(self,text=“电子邮件密码”)
self.e_account_label=tk.label(self,text=“电子邮件帐户”)
self.email\u user=tk.Entry(self,宽度=30)
self.email_pw=tk.Entry(self,show=“*”,width=30)
self.email_account=tk.Entry(self,宽度=30)
self.start\u scheduler=tk.Button(self,text=“启动调度器”,
命令=自我检查(电子邮件请求)
self.e_user_label.pack()
self.email_user.pack()
self.e_pw_label.pack()
self.email_pw.pack()
self.e\u account\u label.pack()
self.email_account.pack()
self.start_scheduler.pack()
def检查电子邮件请求(自我):
call_email_script='call python email_monitor.py{}{}{}'。格式(self.email_user.get(),
self.email_pw.get(),self.email_account.get())
completed=子流程.run(call\u email\u脚本,shell=True)
打印('returncode:',已完成。returncode)
def打印内容(自我):
计划。每(1)分钟。做(自我检查\电子邮件\请求)
尽管如此:
schedule.run_pending()
时间。睡眠(1)
w、 mainloop()#我解决此问题的尝试失败
w=主窗口()
w、 mainloop()

希望计划程序每1分钟继续调用我的检查\u电子邮件\u请求功能。如果我不在schedule循环中包含主循环,窗口将不再工作。当我包含mainloop时,调度程序不再工作。

您根本不需要
调度
模块;Tkinter的
.after()
方法可以将函数调用延迟一分钟,而不会阻塞任何内容(然后函数将在下一分钟再次使用
.after()
调用自己)。您的主循环没有被函数中断吗?关于线程和tkinter@jasonharper我认为
.after()
适用于定期运行的这个。我计划增加另一个时间表,在每个星期天的指定时间运行。我应该举个例子。不过,如果我不使用指定的日期,我认为
.after()
将很好地使用。谢谢@马特姆:我试试那种方法。这听起来是一个让它灵活的好方法。创建一个线程解决了这个问题。我将按钮操作中的
command=self.check\u email\u request
更改为
command=threading.Thread(group=None,target=self.check\u email\u request)。启动。主窗口将保持活动状态,明细表将运行。当我关闭窗口时会出现异常,但这是一个需要解决的小问题。太好了。您总是希望任何函数位于不同于tkinter的线程中,否则它将在执行期间冻结。如果你还没有弄明白,请随意发布这个例外