Установка стилей окна с помощью Tkinter/Tcl: нет кнопки выхода
Я знаю, что Tkinter - это просто тонкий слой над Tcl/Tk. Tkinter вы можете сделать несколько вещей, чтобы изменить стиль окон. Одним из примеров будет root.attributes('-toolwindow', True)
, Это изменило бы стиль окна на стиль окна инструмента. Тем не менее, я смотрю немного ниже уровня.
Я подозреваю, что в какой-то момент Tcl/Tk ссылается на стили окон Windows. Я почти уверен, что это нужно сделать для того, чтобы установить стиль окна и расширить стиль окна Tkinter. Я пытаюсь дать окну Tkinter то, что я почти уверен, это стиль WS_DLGFRAME. Однако я не уверен, как подойти к этому.
Мне интересно, где в Tcl/Tk-части Tkinter он назначает стили окон, и что мне нужно добавить, чтобы получить этот стиль.
Конечная цель - получить стиль рамки окна Tkinter, который выглядит так, как показано ниже (обратите внимание, что в нем нет кнопки выхода):
Это в Windows 7, кстати.
2 ответа
Если вы знакомы с C, скачайте исходный код Tk.
Я посмотрел быстро, и в этом файле:./win/tkWinWm.c
по строке 3072 (tk859-src.zip
), у вас есть функция static int WmAttributesCmd()
, имея дело с -toolwindow
как вы сказали, позже обновленный UpdateWrapper()
,
Так что нет простого способа изменить это, если вы не измените исходный код Tk.
В качестве альтернативы вы можете использовать FindWindow
и искать класс окна Tk TK_WIN_CHILD_CLASS_NAME
определено быть TkChild
, а затем использовать SetWindowLongPtr( GWLP_STYLE, ...)
изменить стиль (но для этого требуется вызов ffi на C или другие средства).
Я сам не знаком ни с Tcl/Tk, так что возьмите его с крошкой соли. Почему бы не попробовать сообщество Tcl / Tk?
Следующая опция инструктирует оконный менеджер не украшать окно (т.е. нет заголовка и кнопок окна, плюс нет границ)
root.overrideredirect(True)
Ложный аргумент восстанавливает украшения.