程序启动后按钮无法正常运行的问题

时间:2017-12-15 19:59:55

标签: python tkinter

我是新手,学习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种不同的时间设置。

1 个答案:

答案 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()

如您所见,按钮保持响应状态,您可以退出应用程序。 所以我认为你可以用同样的技术解决你的问题。