【发布时间】:2015-12-18 12:04:18
【问题描述】:
我正在使用带有两个主要按钮的 Tkinter 制作 GUI:“开始”和“停止”。您能否建议如何使“停止”按钮终止以下代码的“开始”按钮调用的已经运行的函数?
您可能预料到的问题是,在“开始”功能运行时,包括“停止”按钮在内的整个窗口都卡住/没有响应。
“开始”功能从许多 html 文件中提取一些信息,这可能需要相当长的时间(对于 20 个大文件可能需要大约 10 分钟),我希望用户能够在任何时候。
from tkinter import *
import Ostap_process_twitter_file_folder
root = Tk()
def start (event):
Ostap_process_twitter_file_folder.start_extraction()
def stop (event):
# stop "start" function
label1 = Label(root, text = "source folder").grid(row=0)
label2 = Label(root, text = "output folder").grid(row=1)
e_sF = Entry(root)
e_oF = Entry(root)
e_sF.grid(row=0, column=1)
e_oF.grid(row=1, column=1)
startButton = Button(root, text = "start")
startButton.grid(row=2)
startButton.bind("<Button-1>", start)
stopButton = Button(root, text = "stop")
stopButton.grid(row=2, column=1)
stopButton.bind("<Button-1>", stop)
root.mainloop()
我认为使用线程将是解决此问题的方法。尽管我一直在查看有关 stackoverflow 的类似问题以及有关 Python 线程的各种介绍性资源(不是那么多介绍性的,顺便说一句),但我仍然不清楚如何针对这种特殊情况实施这些建议。
【问题讨论】:
标签: python multithreading user-interface tkinter