【发布时间】:2021-01-07 18:56:28
【问题描述】:
我正在编写网页抓取代码,这个过程很长。因此,我想以一种奇特的方式启动和停止它,使用 tkinter 的按钮。但我在网上找不到任何解决方案。
-
.after()函数似乎不是一个好的选择,因为我不想每次都重新启动循环。我的循环已经基于从另一个文档中读取并解析每个文档的 url 工作。 - 我尝试了
.join()的线程选项。但无法解决我的问题。但也许我没有正确编写代码。
我的问题可以表述如下:
开始 → 读取 urls 文档并启动解析循环。
停止 → 停止解析并保存内容。
例如,我希望下面的代码可以工作:
from tkinter import *
flag=False
def test_loop():
while flag==True:
print("True")
while flag==False:
print("False")
def start():
global flag
flag=True
test_loop()
def stop():
global flag
flag=False
test_loop()
root = Tk()
root.title("Test")
root.geometry("500x500")
app = Frame(root)
app.grid()
start = Button(app, text="Start", command=start)
stop = Button(app, text="Stop", command=stop)
start.grid()
stop.grid()
root.mainloop()
【问题讨论】:
-
在 tkinter 应用程序中,您可能需要以某种方式使用
after()以避免导致 GUI“挂起”——您不能干扰其 @987654326 的运行@。使用join()并不是一个真正的选择,因为 tkinter 不直接支持多线程。解决此问题的一种方法是使用我对问题Freezing/Hanging tkinter Gui in waiting for the thread to complete 的回答。 -
谢谢马蒂诺。我去看看。
-
不幸的是,我无法用你的方法让它工作。这很复杂,所以也许我没有正确修改您的代码以适应我的情况。我会尽量说得更清楚。