使用 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 才能正常工作。
我是 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 才能正常工作。