所以我有一个Tkinter应用程序,我在工作中使用。我写了另一个Tkinter应用程序,我想从主要的Tkinter应用程序调用。我知道Tkinter不是“线程安全的”,但我不能100%确定这意味着什么。这是否意味着它可以“工作”,但不能保证按照书面形式工作?或者它应该根本不起作用?
我问的原因是因为当我运行下面的代码时(self.thread_easy_imaging()由filemenu选项触发),它可以正常工作。到目前为止,我没有遇到任何问题,据我所知,这两个GUI都可以运行。这是因为我使用subprocess.call来调用脚本吗?我很难绕过这个问题,因为我知道你不能在Tkinter应用程序中使用线程来执行像运行函数同时仍然可以使用GUI中的按钮,但出于某些原因我使用用subprocess.call调用脚本的线程就可以了。当我写它时,我认为它不起作用,但由于一些奇怪的原因,它确实有效。以下是我正在使用的代码示例:
def thread_easy_imaging(self):
thread.start_new_thread(self.start_easy_imaging, ('EASY-IMAGING-1', 0))
def start_easy_imaging(self, thread_name, delay):
time.sleep(delay) #have to have args for some reason? I just did a delay of 0 seconds so I could use the tuple.
subprocess.call(['c:/python27/python.exe', 'EasyImaging.py'])
self.thread_easy_imaging()
我只在Windows机器上使用过它,但我猜它应该适用于任何操作系统。
编辑:脚本根本不需要交互,我只想将我的其他GUI应用程序添加到文件菜单中,这样我就可以将其称为单独的应用程序。如果需要,我将只使用Toplevel小部件来重新创建我想要调用的应用程序,因为它根本不会破坏主线程。
提前致谢!