用Tkinter/Tcl设置窗口样式:没有退出按钮
我知道Tkinter其实是建立在Tcl/Tk之上的一个简单界面。用Tkinter可以做一些事情来改变窗口的样式。比如说,使用root.attributes('-toolwindow', True)
这段代码,就可以把窗口的样式改成工具窗口的样子。不过,我想深入一点,看看更底层的东西。
我猜在某个时候,Tcl/Tk会参考Windows的窗口样式。我觉得它必须这样做,才能设置窗口的样式,进而影响Tkinter窗口的样式。我想给Tkinter窗口设置一个我认为是WS_DLGFRAME的样式,但我不太确定该怎么做。
我想知道在Tkinter的Tcl/Tk部分,在哪里可以设置窗口样式,以及我需要添加什么才能实现这个样式。
我的最终目标是让Tkinter窗口的边框样式看起来像下面这个(注意它没有关闭按钮):
顺便说一下,这是在Windows 7上。
2 个回答
下面这个选项是告诉窗口管理器不要给窗口加装饰,也就是说窗口上不会有标题栏和按钮,也没有边框。
root.overrideredirect(True)
如果把这个选项设置为假,就会恢复这些装饰。
如果你对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, ...)
来改变窗口样式(不过这需要一些调用C语言的技巧或者其他方法)。
我自己对Tcl/Tk也不太熟悉,所以你可以参考一下。为什么不去问问Tcl/Tk的社区呢?