如何从 tkinter 窗口中删除 **仅** x 按钮(保留最大化和最小化按钮)?

问题描述 投票:0回答:1

我有这个,但它删除了所有按钮。与 overideredirent(True) 不同,它确实允许 alt-tabbing:

    hwnd = windll.user32.GetParent(self.root.winfo_id())
    style = windll.user32.GetWindowLongA(hwnd, -16)  # GWL_STYLE
    WS_MINIMIZEBOX = 0x20000
    WS_MAXIMIZEBOX = 0x10000
    WS_SYSMENU = 0x80000
    new_style = style | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
    new_style = new_style & ~WS_SYSMENU
    windll.user32.SetWindowLongA(hwnd, -16, new_style)
    self.root.update_idletasks()

有什么想法吗?

python windows winapi window ctypes
1个回答
0
投票

根据这个答案,没有直接的方法来禁用关闭按钮,但是您可以覆盖

protocol
的处理程序
WM_DELETE_WINDOW
,以便在单击关闭按钮时不执行任何操作。这是一个快速工作示例:

import tkinter as tk


root = tk.Tk()
root.protocol('WM_DELETE_WINDOW', 'break')  # tell the Close button to do nothing
# optional quit button
btn_close = tk.Button(root, command=root.quit, text='Quit')
btn_close.pack()


if __name__ == '__main__':
    root.mainloop()

我添加了一个“退出”按钮,这样您就不会被窗口困住,但您已经明白了。

也就是说,虽然这有效,但它也违反了 POLA,因为关闭按钮在技术上并未被禁用。它看起来仍然一样并且仍然可以交互 - 它只是不再做任何事情。

© www.soinside.com 2019 - 2024. All rights reserved.