尝试在python中使用无限循环实现多线程,但是我的GUI仍然冻结

尝试在python中使用无限循环实现多线程,但是我的GUI仍然冻结,python,multithreading,user-interface,freeze,Python,Multithreading,User Interface,Freeze,因此,我对编程相当缺乏经验,但由于我很喜欢它,我想我会扩展业务,尝试一些东西。 我试图编写的程序执行我已经在tkinter GUI窗口中编写的代码,并设置为每天在特定时间运行,直到程序关闭。(基本上是一个奇特的警报)。为此,我尝试使用线程模块在后台的不同线程上运行无限“while”循环,同时仍然能够使用GUI进行其他操作 def连续任务(args): 当0==0时: currenttime=time.localtime(time.time()) 如果currenttime.tm_hour==8,

因此,我对编程相当缺乏经验,但由于我很喜欢它,我想我会扩展业务,尝试一些东西。 我试图编写的程序执行我已经在tkinter GUI窗口中编写的代码,并设置为每天在特定时间运行,直到程序关闭。(基本上是一个奇特的警报)。为此,我尝试使用线程模块在后台的不同线程上运行无限“while”循环,同时仍然能够使用GUI进行其他操作

def连续任务(args):
当0==0时:
currenttime=time.localtime(time.time())
如果currenttime.tm_hour==8,currenttime.tm_min==0,currenttime.tm_sec==0:
任务(args)
def后台任务(args):
线程1=线程(目标=连续任务(args))
thread1.start()
一无所获
root=Tk()
frame1=帧(根)
frame1.pack()
frame2=帧(根)
frame2.pack()
frame3=帧(根)
frame3.pack()
inputbox=条目(第2帧,宽度=20)
inputbox.pack(侧=左,pady=10)
页眉=标签(框架1,文本=页眉,高度=3,宽度=60)
header.pack(侧边='left')
button=button(frame2,text='Start',width=10,command=lambda:background\u任务(inputbox.get())
按钮包(边='左')
关闭=按钮(第3帧,文本='Close Program',命令=root.quit)
封闭式包装(侧面=‘底部’,pady=5)
root.mainloop()
当我运行这段代码时,当我按start时GUI仍然冻结,我有点被这个问题的调试卡住了,因为我不完全理解线程模块

def background_task(entry_value):
    thread1 = Thread(target=continuous_tasks, args=(entry_value,))
    thread1.start()
    return None
线程
多处理
库的典型失误。写入
target=continuous\u tasks(args)
相当于运行
continuous\u tasks(args)
和写入
target=None


由于您是编程新手,以下是一些关于您想尝试的技巧。“连续任务”功能是在特定时间(小时-分钟-秒)运行的功能。签出模块
计划
,这是正确的方法

另外,在一个边线程中创建一个无限循环肯定不是一个好主意。避免这样做,除非你的线程中有一些中断(比如
线程。{Condition,Event,…}
time.sleep
),即使你这样做了,你肯定应该在你的线程中设置一个停止条件

线程
多处理
库的典型失误。写入
target=continuous\u tasks(args)
相当于运行
continuous\u tasks(args)
和写入
target=None


由于您是编程新手,以下是一些关于您想尝试的技巧。“连续任务”功能是在特定时间(小时-分钟-秒)运行的功能。签出模块
计划
,这是正确的方法

另外,在一个边线程中创建一个无限循环肯定不是一个好主意。避免这样做,除非你的线程中有一些中断(比如
线程。{Condition,Event,…}
time.sleep
),即使你这样做了,你肯定应该在你的线程中设置一个停止条件

线程
多处理
库的典型失误。写入
target=continuous\u tasks(args)
相当于运行
continuous\u tasks(args)
和写入
target=None


由于您是编程新手,以下是一些关于您想尝试的技巧。“连续任务”功能是在特定时间(小时-分钟-秒)运行的功能。签出模块
计划
,这是正确的方法

另外,在一个边线程中创建一个无限循环肯定不是一个好主意。避免这样做,除非你的线程中有一些中断(比如
线程。{Condition,Event,…}
time.sleep
),即使你这样做了,你肯定应该在你的线程中设置一个停止条件

线程
多处理
库的典型失误。写入
target=continuous\u tasks(args)
相当于运行
continuous\u tasks(args)
和写入
target=None


由于您是编程新手,以下是一些关于您想尝试的技巧。“连续任务”功能是在特定时间(小时-分钟-秒)运行的功能。签出模块
计划
,这是正确的方法


另外,在一个边线程中创建一个无限循环肯定不是一个好主意。避免这样做,除非你的线程中有一些中断(比如
线程。{Condition,Event,…}
time.sleep
),即使你这样做了,你也应该在你的线程中设置一个停止条件。

啊,对了,这解决了我的冻结问题,谢谢你,但是遇到了另一个错误,当以这种方式输入args时,它似乎将“inputbox”中的每个字符分割为一个单独的参数,而我希望整个过程仅为一个参数。TypeError:continuous_task()接受1个位置参数,但13个参数被赋予以下内容:
def continuous_task(*args):
Ho可能我不对。我以为
args
是一个元组,但它是一个字符串。我正在编辑哦,很好,这一切都成功了,我将整理代码并修复while循环问题,谢谢你的帮助,它修复了我的冻结问题,所以感谢堆,但遇到另一个错误,当以这种方式输入args时,它似乎将“inputbox”中的每个字符作为一个单独的参数拆分,当我希望整件事只是一个论点的时候。TypeError:continuous_task()接受1个位置参数,但13个为giv