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

问题描述 投票:-6回答:1

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

python tkinter
1个回答
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()

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

© www.soinside.com 2019 - 2024. All rights reserved.