tkinter - 在基于 debian 的 Linux 上,tkinter 中的 overrideredirect(True) 方法面临问题

标签 tkinter tk-toolkit

我正在基于 debian 的 Linux 中使用 python tkinter 开发一个 GUI

每当我使用overrideredirect(True)方法删除根和顶级窗口标题栏时我面临下面提到的问题

  1. 当我点击输入字段时,输入字段不起作用(未获得焦点/未获得输入)。
  2. 每当我使用 Alt+Tab 键时,只有它才会获得焦点。
  3. 然后我必须在单击的位置按住鼠标左键或右键,然后只有输入字段接受输入,否则输入将写入终端窗口。

任何人都可以在基于 Linux 的系统上的 tkinter 中提出一种删除标题栏或隐藏标题栏的替代方法。此代码在 Windows 系统上运行良好。

有一个问题Tkinter's overrideredirect prevents certain events in Mac and Linux这似乎与我的问题相同,但我无法得到它的解决方案。

from tkinter import *

class GuiApp:
    def __init__(self,master):
        master_frame = Frame(master,background= 'blue')
        master_frame.grid()
        b1 = Button(master_frame,
                      height=3,text="BUTTON",width=15, font=14,command=lambda parent=master: self.create_top_window(parent))
        b1.grid(row=0, column=0, pady=3, padx=5)
        master_frame.grab_set()

    def create_top_window(self,parent):
        toplevel = Toplevel(parent, bg='red', bd=5, relief=RIDGE)
        toplevel.geometry('350x250')
        toplevel.wm_overrideredirect(True)
#       toplevel.wm_attributes('-type','splash')
        label=Label(toplevel,text='Entry:')
        entry=Entry(toplevel,width=10,font=13)
        button = Button(toplevel, text='close', font=('TkTextFont', 14), command=toplevel.destroy)
        label.grid(row=0,column=0,padx=5,pady=5)
        entry.grid(row=0,column=1,padx=5,pady=5)
        button.grid(row=1, column=0, padx=1, pady=1)
        toplevel.grab_set()

root = Tk()
root.wm_overrideredirect(True)
#root.wm_attributes('-type','splash')
app = GuiApp(root)
root.mainloop()

最佳答案

标题栏由窗口管理器提供。当您设置 overrideredirect 标志时,您要求窗口管理器忽略您的窗口,这不仅仅是删除装饰。然而,扩展窗口管理器提示协议(protocol)允许您指定窗口的预期类型(菜单、启动画面、对话框等),并提供一种提示窗口管理器的方法,以便它可以提供合适的装饰。在这种情况下,它听起来像一个启动屏幕,因此您可以尝试使用“splash”作为窗口类型:

self.wm_attributes('-type', 'splash')

仅当 Tk 窗口系统为“x11”时才提供“type”属性。启动提示应该为您摆脱窗口管理器装饰,尽管这取决于窗口管理器配置。

关于tkinter - 在基于 debian 的 Linux 上,tkinter 中的 overrideredirect(True) 方法面临问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52121872/

相关文章:

ruby - 更改 ruby​​ tk 中笔记本选项卡的字体大小

linux - 我想从另一个脚本运行一个脚本,使用相同版本的 perl,并将 IO 重新路由到类似终端的文本框

tcl - 如何从 TCL 中的文件中获取选择性数据?

python - 使用带有 tkinter 的 Python 3 选择文本小部件中的所有文本

python - 如何在 tkinter 中使用 grid() 方法在新小部件上创建按钮?

python - tkinter 消息框阻止 Entry 小部件工作

r - 如何在 R 中为 Tk 组合框设置值

python-tk 有未满足的依赖关系

python - 如何等待鼠标点击?

python - 有没有一种方法可以将图像保存在 OpenCV 执行期间创建的子文件夹中