我是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