2015-06-28 31 views
0

我是python的新手,想从基本知识中学习。 我想在单个窗口中打开另外两个应用程序,如记事本。我通过使用“tkinter”搜索任何示例。任何想法用“tkinter”来实现。使用python在单个窗口中打开其他应用程序

PS:左边和右边两个选项卡,这样一个选项卡将有记事本,其他选项将有一个媒体播放器(让我们说),我应该能够关闭用于关闭此子窗口的单个父窗口。

回答

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这个工作。

+0

Alexey,非常感谢评论..它看起来像我有同样的要求。我会尽力通过我的更新回复您。希望这能解决我的问题以及其他类似问题。 – hhsecond

+0

@hhsecond你的问题是怎么回事?该解决方案对您有帮助吗? –

+0

对于迟到的回复感到抱歉。我仍然在努力。你的回答帮助我找到了方法。需要多一点时间来确认它。将相应更新。非常感谢您的时间。 – hhsecond

0

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

0

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

如果你想打开例如。一个编辑器,在你选择的工具箱中寻找一个你想要(或接近)的工具。例如。如果你想要一个编辑器,可以在GTK中使用GtkTextView,或者,如果你想要一些可以做代码编辑的东西,可以看一下GtkSourceView等。媒体应用程序也是如此。

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

相关问题