You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 21:00:10