我正在为python + tkinter中的xfreerdp编写一个轻量级客户端。在屏幕的顶部,我放置了一个带有按钮的菜单,这些按钮应该出现在所有程序的顶部。只要我不使用xfreerdp的 /f 开关,它就可以工作。据我了解,如果另一个程序以全屏模式启动, wm_attributes ("-topmost", True)将不起作用。
tkinter中是否有另一种方法可以在全屏应用程序之上显示 Toplevel?
或者在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()