如何在运行计划的情况下退出tkinter窗口?

时间:2019-05-17 17:23:44

标签: python

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

我似乎能够使调度程序正常工作,但是当它运行时,它现在会中断主循环,因此窗口不再响应。

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

import tkinter as tk
import subprocess
import schedule
import time

class MainWindow(tk.Tk):

    def __init__(self):
        tk.Tk.__init__(self)
        self.e_user_label = tk.Label(self, text="Email Username")
        self.e_pw_label = tk.Label(self, text="Email Password")
        self.e_account_label = tk.Label(self, text="Email Account")
        self.email_user = tk.Entry(self, width=30)
        self.email_pw = tk.Entry(self, show="*", width=30)
        self.email_account = tk.Entry(self, width=30)
        self.start_scheduler = tk.Button(self, text="Start Scheduler", 
            command=self.check_email_request)
        self.e_user_label.pack()
        self.email_user.pack()
        self.e_pw_label.pack()
        self.email_pw.pack()
        self.e_account_label.pack()
        self.email_account.pack()
        self.start_scheduler.pack()

    def check_email_request(self):
        call_email_script = 'call python email_monitor.py {} {} {}'.format(self.email_user.get(), 
            self.email_pw.get(), self.email_account.get())
        completed = subprocess.run(call_email_script, shell=True)
        print('returncode:', completed.returncode)

    def print_stuff(self):
        schedule.every(1).minutes.do(self.check_email_request)
        while True:
            schedule.run_pending()
            time.sleep(1)
            w.mainloop() #my failed attempt to solve this problem

w = MainWindow()
w.mainloop()

期望调度程序每隔1分钟继续调用我的check_email_request函数。如果我不在时间表循环中包含主循环,则该窗口将不再起作用。当我包含mainloop时,调度程序将不再起作用。

0 个答案:

没有答案