使用python在单个窗口中打开其他应用程序

时间:2015-06-28 10:33:09

标签: python window parent

我是python的新手,想要从基础知识中学到这一点。 我想在一个窗口中打开另外两个应用程序,如记事本。我使用“tkinter”搜索了任何例子。任何想法使用“tkinter”实现这一点。

PS:两个标签左边一个,右边一个标签,一个标签有记事本,其他标签有媒体播放器(比如说),我应该可以关闭单个父窗口关闭这个子窗口。

3 个答案:

答案 0 :(得分:0)

根据您的需要,您必须使用tkinter或pyqt等库。由于你想从基础学习它,我建议你选择一个GUI库并开始学习它。最终你会知道如何获得你想要的结果。

答案 1 :(得分:0)

我认为你不能轻易做到这一点。记事本使用自己的工具包,很可能与您正在使用的工具包不兼容。

如果你想打开例如。编辑器,在您选择的工具箱中查找一个小部件,它可以完成您想要的(或接近)。例如。如果你想要一个编辑器,可以在GTK中使用GtkTextView,或者,如果你想要一些可以进行代码编辑的东西,可以查看GtkSourceView等。媒体应用也是如此。

'包括'作为项目一部分的应用程序仅适用于某一点。您可以例如,在终端窗口中包含文本模式应用程序,但图形应用程序要困难得多。

答案 2 :(得分:0)

在具有X服务器的Unix系统上,XEmbed协议存在用于此目的,但它需要专门为此准备子应用程序(这里是相关的question)。

在Windows上,这可以使用Win32 API完成。您必须获取父窗口和子窗口的句柄并使用SetParent函数。

以下是概念证明:

from tkinter import Tk
from win32gui import SetParent, FindWindow, SetWindowPos
import time
import subprocess


def attach_window(window_class, parent, x, y, width, height):
    child = FindWindow(window_class, None)
    SetParent(child, parent)
    SetWindowPos(child, 0, x, y, width, height, 0)


def main():
    root = Tk()

    subprocess.Popen('C:\\Windows\\system32\\notepad.exe')
    subprocess.Popen('C:\\Windows\\system32\\calc.exe')

    # Give child processes enough time to launch
    time.sleep(0.5)

    # Get the HWND of the parent window
    parent = int(root.frame(), 16)

    attach_window('Notepad', parent, 0, 0, 400, 200)
    attach_window('CalcFrame', parent, 0, 205, 420, 320)

    root.geometry('500x500')
    root.mainloop()


if __name__ == '__main__':
    main()

请注意,您必须安装PyWin32才能使用此功能。