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

Opening other application in single window using python

我是 python 的新手,想从基础开始学习。 我想在一个 window 中打开另外两个应用程序,例如记事本。我使用 "tkinter" 搜索了任何示例。使用 "tkinter" 实现这个的任何想法。

PS:两个选项卡,一个在左边,一个在右边,这样一个选项卡将有记事本,另一个将有一个媒体播放器(比方说),我应该能够关闭单个 parent window 用于关闭此 child windows.

对于你需要的东西,你将不得不使用像 tkinter 或 pyqt 这样的库。因为你想从基础学习它,我建议你选择一个 GUI 库并开始学习它。最终你会知道如何得到你想要的结果。

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

如果你想打开例如。一个编辑器,在你选择的工具包中寻找一个小部件,它可以做你想要的(或几乎)。例如。如果您想要一个编辑器,请使用 GTK 中的 GtkTextView,或者,如果您想要可以进行代码编辑的东西,请查看 GtkSourceView 等。媒体应用程序也是如此。

作为项目一部分的 'include' 应用程序只能在一定程度上起作用。例如,您 可以 在终端中包含文本模式应用程序 window,但图形应用程序要困难得多。

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

在 Windows 上,这可以使用 Win32 API 来完成。您必须获取父子句柄 windows 并使用 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 才能正常工作。