<p>我的问题是:使用Tkinter,我想单击一个按钮并启动一个python脚本。
这个python脚本现在是一个导入到主脚本中的模块(我不知道这是否是最好的方法)。
此脚本应在后台运行。它有一个方法可以让它退出。我怎么称呼它?
我想传递一个旗帜或其他东西到模块,但我不知道怎么做。在</p>
<p>现在,我这样称呼我的代码:in图形用户界面.py在</p>
<pre><code>import sniffer_wideband_v09
from Tkinter import *
root = Tk()
def handle_click():
global t
global stop_flag
stop_flag = 0
def callback():
sniffer_wideband_v09.main(sampling_rates, center_frequencies, gains, file_dir, files_names)
t = Thread(target=callback)
t.start()
root.mainloop()
</code></pre>
<p>我想调用sniffer_wide band_v09.py中的quiting()方法。或者向我的模块传递一个标志来停止无限循环。
之后,我需要将所有这些绑定到Tkinter按钮上。在</p>
<p>我对这个问题做了一些研究,发现:</p>
<p><a href="https://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in-python">Is there any way to kill a Thread in Python?</a>
随着
<a href="https://stackoverflow.com/questions/5048082/how-to-run-a-function-in-the-background-of-tkinter">How to run a function in the background of tkinter</a>
和
<a href="https://stackoverflow.com/questions/15847717/how-to-run-and-stop-an-infinite-loop-in-a-python-thread">How to run and stop an infinite loop in a python thread</a></p>
<p>第一个是有希望的,但我不完全理解,我正在努力。在</p>
<p>注意:我直接用我的shell运行它/图形用户界面.py我使用的是Ubuntu,而不是windows(我认为它可以改变一些处理多线程的方式)。在</p>
<p>感谢阅读,任何提示或帮助将不胜感激。如果我在同一时间内找到响应,我会发布我的代码。在</p>
<p>编辑:提供有关线程中启动的脚本的更多信息:(它是一个GNURadio脚本)</p>
^{pr2}$
<p>我花了几个小时试图解决您的问题,以供我自己借鉴,使用线程,而几个无响应的ui后来得到这样的结果:TkInter不是线程安全的,从
<a href="https://stackoverflow.com/questions/7014984/tkinter-tkmessagebox-not-working-in-thread">tkinter tkMessageBox not working in thread</a>。在</p>