我是新手,学习python 3.6,我差不多完成了我的第一个代码项目。在进行了详尽的搜索以解决我的问题后,我无法找到答案,我确信这是一个简单的疏忽。
计划前提: 用户输入URL并单击时间范围的复选框以调用URL。然后用户单击开始按钮,程序开始根据所选的复选框(时间)打开时间循环中的URL。 这工作正常......但是一旦程序启动,按钮不再处于活动状态且不起作用,则无法单击它们。 我使用了tkinter作为gui。
我正在尝试为用户保留2个按钮。退出按钮,退出程序功能,退出按钮完全退出和关闭程序。
赞赏正确方向的一点。
使用的当前sleep()代码:
def execute():
execute = urllib.request.urlopen(url.get()))
def Time():
if CheckVar1.get() and url.get():
timeloop = True
Sec = 0
Min = 0
timeLoop = A
while timeLoop:
Sec += 1
execute()
time.sleep(300)
我希望这有助于让我的问题更容易理解。 我相信我可能需要找到另一种方法来做这样做,以便循环允许程序的其他部分(按钮)保持活动状态,以便用户可以在程序运行后退出或退出程序。 注意:CheckVar1.get()用于验证是否已为该时间范围选中了复选框,正在使用8种不同的时间设置。
答案 0 :(得分:0)
你的代码缩进是错误的,也许还有其他问题,但是由于你的方法本质上是错误的,这里有一个例子,说明如何在tkinter中调用一段时间后,而不阻塞UI。这可以用作一种后台处理,而且很简单:
import tkinter as tk
from tkinter import Tk, ttk
def some_action():
# do what you want
# ...
print('Hi! Getting my urls here...')
# but don't block with sleeps or infinite loops,
# and then
next_check = get_your_check_interval() # somehow calculate or
# retrieve this from
# your vars or widgets,
# using seconds
# register for the next call of some_action
root.after(next_check*1000, some_action)
def get_your_check_interval():
return 3 # just using 3 seconds now...
root = Tk()
start_button = ttk.Button(root, text='Start', command=some_action)
quit_button = ttk.Button(root, text='Quit', command=quit)
start_button.pack(side=tk.LEFT)
quit_button.pack()
root.mainloop()
如您所见,按钮保持响应状态,您可以退出应用程序。 所以我认为你可以用同样的技术解决你的问题。