Установка стилей окна с помощью 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)

Ложный аргумент восстанавливает украшения.

Другие вопросы по тегам