我是python的新手,想从基本知识中学习。 我想在单个窗口中打开另外两个应用程序,如记事本。我通过使用“tkinter”搜索任何示例。任何想法用“tkinter”来实现。使用python在单个窗口中打开其他应用程序
PS:左边和右边两个选项卡,这样一个选项卡将有记事本,其他选项将有一个媒体播放器(让我们说),我应该能够关闭用于关闭此子窗口的单个父窗口。
我是python的新手,想从基本知识中学习。 我想在单个窗口中打开另外两个应用程序,如记事本。我通过使用“tkinter”搜索任何示例。任何想法用“tkinter”来实现。使用python在单个窗口中打开其他应用程序
PS:左边和右边两个选项卡,这样一个选项卡将有记事本,其他选项将有一个媒体播放器(让我们说),我应该能够关闭用于关闭此子窗口的单个父窗口。
在具有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这个工作。
为了您的需要,您将不得不使用像tkinter或pyqt这样的库。正如你想从基础学习它,我建议你选择一个GUI库,并开始学习它。最终你会知道如何得到你想要的结果。
我认为你不会轻易做到这一点。记事本正在使用它自己的工具包,它很可能与您正在使用的工具不兼容。
如果你想打开例如。一个编辑器,在你选择的工具箱中寻找一个你想要(或接近)的工具。例如。如果你想要一个编辑器,可以在GTK中使用GtkTextView,或者,如果你想要一些可以做代码编辑的东西,可以看一下GtkSourceView等。媒体应用程序也是如此。
“包含”应用程序作为项目的一部分仅适用于某个特定点。例如,您可以在终端窗口中包含文本模式应用程序,但图形应用程序要困难得多。
Alexey,非常感谢评论..它看起来像我有同样的要求。我会尽力通过我的更新回复您。希望这能解决我的问题以及其他类似问题。 – hhsecond
@hhsecond你的问题是怎么回事?该解决方案对您有帮助吗? –
对于迟到的回复感到抱歉。我仍然在努力。你的回答帮助我找到了方法。需要多一点时间来确认它。将相应更新。非常感谢您的时间。 – hhsecond