python + tkinter でxfreerdpの軽量クライアントを作成しています。画面の上部に、すべてのプログラムの上に表示されるボタンを含むメニューを配置しました。xfreerdpに /f スイッチを使用しない限り、機能します。別のプログラムがフルスクリーン モードで起動された場合、wm_attributes ("-topmost", True)は機能しないことを理解しました。
フルスクリーンアプリの上にトップレベルを表示するtkinterの別の方法はありますか?
または、tkinter ウィンドウ内で xfreerdp を実行する方法はありますか?
または、 Python 用の別の GUI を使用した同様の方法ですか?
from tkinter import *
import subprocess
# ======== MAIN MENU ========
root = Tk()
RootWindowsWidth = 600
RootWindowHeight = 350
#Define display resolution
ScrWdth = root.winfo_screenwidth()
ScrHgth = root.winfo_screenheight()
#Define margine for main menu
RootXLeft = round((ScrWdth/2) - (RootWindowsWidth/2))
RootYTop = round((ScrHgth/2) - (RootWindowHeight/2))
#Main menu settings
root.geometry(str(RootWindowsWidth) + "x" + str(RootWindowHeight) + "+" + str(RootXLeft) + "+" + str(RootYTop))
root['bg'] = '#fafafa'
root.title('MyRDP')
root.wm_attributes('-alpha', 1)
# Global variable for TopBar
TopBarWindowsWidth = 600
TopBarWindowHeight = 20
TopBarXLeft= round((ScrWdth/2) - (TopBarWindowsWidth/2))
TopBarYTop = 0
# ======== TOP MENU ========
global TopBar
TopBar = Toplevel()
TopBar.geometry(str(TopBarWindowsWidth) + "x" + str(TopBarWindowHeight) + "+" + str(TopBarXLeft) + "+" + str(TopBarYTop))
TopBar.wm_attributes('-alpha', 0.85)
TopBar.attributes('-type', 'dock')
TopBar.wm_attributes("-topmost", True)
TopButton01 = Button(TopBar, text='BTN1')
TopButton02 = Button(TopBar, text='BTN2')
TopButton01.grid(row=0,column=0)
TopButton02.grid(row=0,column=2)
# ======== Functions ========
#RDP connect button
def btn_click():
subprocess.call("gnome-terminal -x xfreerdp /cert-ignore /v:192.168.31.63 /u:user /d:vm2 /p:123 /f", shell=True)
#Exit button
def btn_quit():
root.quit()
# ======== MAIN MENU CONFIG ========
canvas = Canvas(root, height=350, width=600)
canvas.pack()
frame = Frame(root, bg='green')
frame.place(relx=0.15, rely=0.15, relwidth=0.7, relheight=0.7)
btn = Button(frame, text='RDP', bg='yellow', command=btn_click)
btn.pack()
btn = Button(frame, text='Close', bg='orange', command=btn_quit)
btn.pack()
root.mainloop()