使用 Tkinter/Tcl 设置窗口样式:没有退出按钮
我知道 Tkinter 只是 Tcl/Tk 上的一个薄层。 Tkinter 你可以做一些事情来改变窗口样式。一个示例是 root.attributes('-toolwindow', True)
。这会将窗口样式更改为工具窗口的样式。不过,我希望能降低一点水平。
我怀疑在某些时候 Tcl/Tk 引用了 Windows 窗口样式。我很确定必须这样做才能设置窗口样式并扩展 Tkinter 窗口样式。我正在尝试为 Tkinter 窗口提供我非常确定的 WS_DLGFRAME 样式。但是,我不确定如何解决这个问题。
我想知道 Tkinter 的 Tcl/Tk 部分在哪里分配窗口样式,以及我必须添加什么才能获得这种样式。
最终目标是获得如下所示的 Tkinter 窗口边框样式(注意它缺少退出按钮):
顺便说一句,这是在 Windows 7 中。
I know that Tkinter is just a thin layer over Tcl/Tk. Tkinter you can do a few things to change the windows styling. One example would be root.attributes('-toolwindow', True)
. This would change the window style, to that of a tool window. However, I'm looking to go a little bit lower level.
I suspect at some point Tcl/Tk refrences Windows window styles. I'm pretty sure it would have to do this in order to set the window style and by extension the Tkinter window styling. I'm trying to give a Tkinter window what I'm pretty sure is the WS_DLGFRAME style. However, I'm unsure how to approach this.
I'm wondering where in the Tcl/Tk part of Tkinter does it assign windows styles, and what I'd have to add to get this style.
The end goal is to get a Tkinter window border style that looks like the one below (note how it lacks an exit button):
This is in Windows 7, BTW.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
以下选项指示窗口管理器不要装饰窗口(即没有标题栏和窗口按钮,并且没有边框)。
false 参数将恢复装饰。
The following option instructs the window manager not to decorate the window (i.e no title bar and window buttons, plus no borders)
A false argument restores the decorations.
如果您熟悉 C,请下载 Tk 源代码。
我快速查看了一下,在这个文件中:
./win/tkWinWm.c
在第 3072 行 (tk859-src.zip
),您有函数static int WmAttributesCmd()
,处理正如您所说,使用-toolwindow
,稍后由UpdateWrapper()
更新。所以没有简单的方法来改变它,除非你改变 Tk 源代码。
或者,您可以使用
FindWindow
并查找定义为TkChild
的 Tk 窗口类TK_WIN_CHILD_CLASS_NAME
,然后使用SetWindowLongPtr( GWLP_STYLE , ...)
来更改样式(但这需要对 C 进行一些 ffi 调用或其他方式)。我自己对 Tcl/Tk 都不熟悉,所以要持保留态度。为什么不试试 Tcl/Tk 社区呢?
If you are familiar with C, download Tk source code.
I've looked quickly, and in this file:
./win/tkWinWm.c
at line 3072 (tk859-src.zip
), you have the functionstatic int WmAttributesCmd()
, dealing with-toolwindow
as you've said, later updated byUpdateWrapper()
.So no easy way to change it, unless you change Tk source code.
Alternatively you might be able to use
FindWindow
and look for Tk's window classTK_WIN_CHILD_CLASS_NAME
defined to beTkChild
, and then useSetWindowLongPtr( GWLP_STYLE, ...)
to change the style (but this requires some ffi call to C or other means).I myself I'm not familiar with neither Tcl/Tk, so take it with a grain of salt. Why not try the Tcl/Tk community?