如何从PyQt GUI中打开一个Tkinter应用?

问题描述 投票:0回答:1

我用PySide2 (PyQt)建立了一个应用程序。现在我被要求制作一个QPushButton,它可以简单地启动一个独立的Tkinter应用程序,而这个应用程序是由别人编程的.我想我可以简单地将下面的方法连接到我的QPushButton,它可以启动Tkinter应用程序(Modell_final.App是应用程序)。

def open_tkinter():
 root = tkinter.Tk()
 app = Modell_final.App(root)
 root.mainloop()

但当我在GUI中按下Button时,第一次什么都没有发生,第二次Tkinter App就立即打开并冻结。)

python tkinter pyqt
1个回答
1
投票

我不知道Tkinter应用的独立性如何。如果真的只是一些其他你想运行的小窗口,最终又会被关闭,我会选择为它建立一个自己的进程。

你可以这样尝试。请将其保存为 "test_test.py"

import tkinter as tk
import subprocess

window = tk.Tk()
window.title("Window Title")
window.geometry('200x100')

lbl = tk.Label(window, text="Hello World")
lbl.pack()

def clicked(): #function before bind
    subprocess.Popen(['python' , 'test_test.py'])

btn = tk.Button(window, text="Click Me", command=clicked)
btn.pack()

window.mainloop()

如果它真的是完全独立的,这样做的好处是你甚至不需要将Modell_final导入到PyQt应用程序中。只需导入subprocess,让按钮调用Modell_final。subprocesss.popen (不是subprocesss.call,然后又冻结了)python文件,里面有tkinter应用。

缺点是

  1. 与Tkinter应用共享数据是困难的,但如果是独立的,这里没有问题。
  2. 如果按钮被多次按下,Tkinter应用的多个窗口就会打开。这可能是你想要的,但如果不是,你必须处理好这个问题。
© www.soinside.com 2019 - 2024. All rights reserved.