创建子流程会打开不需要的窗口

时间:2017-03-07 01:43:11

标签: python windows user-interface tkinter subprocess

我目前正在开发一个Windows应用程序,需要使用我创建的.exe文件(在下面的示例中称为kill_game.exe)。此.exe文件接受序列化对象作为参数。我使用subprocess.Popen调用此.exe文件。当我这样做时,我的当前窗口的精确副本打开,我的.exe文件将不会运行,直到我自己关闭第二个窗口。我完全不知道为什么会这样。我希望.exe文件在没有第二个GUI打开的情况下运行。我尝试切换到this example on SO中存在的multiprocessing,但这也不起作用。

下面,我将发布我的代码的简化版本(我的原始版本是300多行),其中说明了GUI和用于打开.exe文件的功能。我还会发布按下按钮时会发生什么的图片。

from tkinter import *
from tkinter import Tk
import subprocess

root = Tk()

sizex = sizey = 500
posx = posy = 100
root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))

myframe = Frame(root, relief=GROOVE, width=500, height=500, bd=1)
myframe.place(x=0, y=0)

canvas = Canvas(myframe)
frame = Frame(canvas)
canvas.pack(side="left")
canvas.create_window((0, 0), window=frame, anchor='nw')

button = Button(frame, text="Hello World")
button.grid(row=0, column=2)

games_to_stop = []
button.bind("<Button>",
            lambda event, game_list=games_to_stop: some_function(game_list))

def some_function(game_list):
    #This function is the function of interest, which is bound to my "Hello
    #World" Button
    child_script = r"C:\Users\Willy\AddictKiller\dist\kill_game.exe"
    subprocess.Popen([child_script, game_list])

root.mainloop()

这是按下按钮之前的GUI:

Before the button is pressed

按下按钮后,这是GUI和第二个GUI(由于某种原因看起来是我的非简化代码的GUI):

enter image description here

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题,当我运行我的程序时,我的主Tkinter窗口的副本将打开,并且该函数将不会运行直到我关闭所有重复项。 你通过在if语句后面放置创建tkiner窗口的部分来解决这个问题,以确保你只在主窗口中创建一个窗口

    if __name__ == "__main__":
        root = Tk()