Debian系统下全屏Tkinter窗口调用Linux屏幕键盘的层级问题
解决Debian下Tkinter全屏窗口遮挡系统屏幕键盘的问题
方案1:调整Tkinter窗口层级属性
默认全屏Tkinter窗口会强制占据最顶层,导致系统屏幕键盘被遮挡。通过修改窗口属性,取消强制置顶并设置为普通窗口类型,即可允许屏幕键盘覆盖:
修改代码,在设置全屏后添加两行属性配置:
import tkinter as tk root = tk.Tk() root.title('OSK') root.attributes('-fullscreen', True) # 取消窗口强制置顶,允许其他窗口覆盖 root.attributes('-topmost', False) # 设置窗口为普通类型,避免独占屏幕层级 root.wm_attributes('-type', 'normal') label = tk.Label(text="Fullscreen Window", font=("Helvetica", 20, "bold")) label.pack(fill="x") f1=tk.LabelFrame(root, text='Entries') f1.place(x=0, rely=0.1, relwidth=1) label1=tk.Label(f1, text='OSK Entry:',font=('Helvetica',18, 'bold')) label1.grid(padx=10, pady=5) entry=tk.Entry(f1, width=25, font=('Arial', 15, 'bold')) entry.grid(column=1, padx=10, pady=10) entry.focus_set() ext=tk.Button(text='Exit', font=('Helvetica',15, 'bold'), bg='crimson', width=12, command=root.destroy) ext.place(relx=.85, rely= .9) root.mainloop()
方案2:通过系统命令强制提升屏幕键盘层级
如果方案1无效,可借助wmctrl工具调整屏幕键盘的窗口层级(需先安装:sudo apt install wmctrl)。以下代码添加了一键启动并置顶屏幕键盘的按钮:
import tkinter as tk import subprocess def launch_osk(): # 启动Debian默认屏幕键盘(以Onboard为例) subprocess.Popen(['onboard']) # 延迟1秒后将屏幕键盘窗口设为顶层 root.after(1000, lambda: subprocess.run(['wmctrl', '-r', 'Onboard', '-b', 'add,above'])) root = tk.Tk() root.title('OSK') root.attributes('-fullscreen', True) label = tk.Label(text="Fullscreen Window", font=("Helvetica", 20, "bold")) label.pack(fill="x") # 添加启动屏幕键盘按钮 osk_btn = tk.Button(text='打开屏幕键盘', font=('Helvetica',15, 'bold'), command=launch_osk) osk_btn.place(relx=.1, rely= .9) f1=tk.LabelFrame(root, text='Entries') f1.place(x=0, rely=0.1, relwidth=1) label1=tk.Label(f1, text='OSK Entry:',font=('Helvetica',18, 'bold')) label1.grid(padx=10, pady=5) entry=tk.Entry(f1, width=25, font=('Arial', 15, 'bold')) entry.grid(column=1, padx=10, pady=10) entry.focus_set() ext=tk.Button(text='Exit', font=('Helvetica',15, 'bold'), bg='crimson', width=12, command=root.destroy) ext.place(relx=.85, rely= .9) root.mainloop()
方案3:调整屏幕键盘系统设置
若使用Onboard作为屏幕键盘,可直接打开其设置面板,找到「窗口行为」选项,勾选「总是在最前面」,即可让屏幕键盘自动显示在所有窗口上方。
内容的提问来源于stack exchange,提问作者Daniel Tiglao
相关产品推荐
相关产品推荐

