2015-06-28 32 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等。媒體應用程序也是如此。

「包含」應用程序作爲項目的一部分僅適用於某個特定點。例如,您可以在終端窗口中包含文本模式應用程序,但圖形應用程序要困難得多。

相關問題