【发布时间】:2021-06-07 08:24:51
【问题描述】:
部分代码:
class A:
def __init__(self,my_arg):
do sth...
def f1(self):
one = (sys.executable, "script.py")
output = subprocess.Popen(one, stdout=subprocess.PIPE)
def f2(self):
do_sth...
class program(tk.Tk):
def __init__(self):
super().__init__()
...
button_run = Button(root)
button_run.configure(command = self.run_program)
root.mainloop()
def run_program(self):
file_list = ['file1','file2']
for file in file_list:
cls_A = A(file)
cls_A.f1()
cls_A.f2()
if __name__== '__main__':
program()
问题:
我已经阅读了很多关于这个问题的主题,但没有看到任何解决方案。 子进程在转换为 exe 后阻塞 Tkinter,并且我的程序与从脚本运行的程序不同,单击 RUN 按钮后正在创建新的 tkinter 窗口并再次...
我知道这个问题与子进程部分有关,如何运行与子进程相同但不同的外部模块?
此解决方案不起作用:pyInstaller loads script multiple times
【问题讨论】:
-
主窗口是重新生成还是创建了一个新窗口?另外,您是否在主循环中使用过
multiprocessing?因为这将再次为不同的进程生成一个新窗口。 -
@AST 很有趣!是的,每次“点击”都会创建该程序的新窗口
-
我明白了,能否请您展示一下
A的课程是做什么的,或者创建一个minimal, reproducible example 来试试? -
@AST 我正在尝试“重新制作”示例,但它很难,它的程序很大,我无法将所有 i 粘贴到这里,但你能告诉我如何在这里使用多处理吗?
-
嗯,我的意思是如果你使用
multiprocessing,可能会出现问题,你不必使用它。至少尝试提及它执行什么样的操作。在当前代码中似乎没有什么可疑之处,除了对A类中的函数的调用。
标签: python tkinter subprocess pyinstaller