所以我对编程很缺乏经验,但是当我享受它时,我想我会分支并尝试一些东西。 我正在尝试编写的程序执行我已经在tkinter GUI窗口中编写的代码,并设置为每天在特定时间运行,直到程序关闭。 (基本上是花哨的警报)。为了做到这一点,我尝试使用线程模块在后台的不同线程上运行无限“while”循环,同时仍然可以将GUI用于其他事情。
def continuous_task(args):
while 0==0:
currenttime = time.localtime(time.time())
if currenttime.tm_hour == 8 and currenttime.tm_min == 0 and currenttime.tm_sec == 0:
task(args)
def background_task(args):
thread1 = Thread(target = continuous_task(args))
thread1.start()
return None
root = Tk()
frame1 = Frame(root)
frame1.pack()
frame2 = Frame(root)
frame2.pack()
frame3 = Frame(root)
frame3.pack()
inputbox = Entry(frame2, width = 20)
inputbox.pack(side = 'left', pady = 10)
header = Label(frame1, text = 'Header', height=3, width = 60)
header.pack(side = 'left')
button = Button(frame2, text = 'Start', width = 10, command = lambda: background_task(inputbox.get()))
button.pack(side = 'left')
Close = Button(frame3, text = 'Close Program', command = root.quit)
Close.pack(side = 'bottom', pady = 5)
root.mainloop()
当我运行此代码时,当我按下启动时,GUI仍然会冻结,并且由于我不完全理解线程模块,因此我对此问题的调试有点困惑。
答案 0 :(得分:3)
def background_task(entry_value):
thread1 = Thread(target=continuous_tasks, args=(entry_value,))
thread1.start()
return None
了解threading
和multiprocessing
图书馆的典型未知。写target=continous_tasks(args)
等同于运行continuous_tasks(args)
并撰写target=None
<小时/> 由于您是编程新手,这里有一些关于您想要尝试的提示。函数
continuous_tasks
是在特定时间(小时分钟)运行的函数。签出模块schedule
,这是正确的方法。
另外,在侧面线程中进行无限循环绝对不是一个好主意。避免这样做,除非你的线程中有一些中断(如threading.{Condition,Event,...}
,time.sleep
),即使你这样做,你肯定会在你的线程中做出停止条件线程。