Python 为什么不是';t Gtk.Entry()由set-width-chars()设置

Python 为什么不是';t Gtk.Entry()由set-width-chars()设置,python,linux,gtk3,Python,Linux,Gtk3,可能是个傻瓜,但找不到匹配的。在我的脑海里感觉像是一个盲点,因为它(看起来)简单,但却无法理解 问题 问题是Gtk.Entry似乎没有听Entry.set\u width\u chars(5)中定义的内容,但我找不到原因。为了避免噪音,我将代码缩小为一个最小的窗口: #/usr/bin/env蟒蛇3 导入gi gi.require_版本('Gtk','3.0') 从gi.repository导入Gtk 类接口: 定义初始化(自): win=Gtk.Window() maingrid=Gtk.Gr

可能是个傻瓜,但找不到匹配的。在我的脑海里感觉像是一个盲点,因为它(看起来)简单,但却无法理解

问题 问题是
Gtk.Entry
似乎没有听
Entry.set\u width\u chars(5)
中定义的内容,但我找不到原因。为了避免噪音,我将代码缩小为一个最小的窗口:

#/usr/bin/env蟒蛇3
导入gi
gi.require_版本('Gtk','3.0')
从gi.repository导入Gtk
类接口:
定义初始化(自):
win=Gtk.Window()
maingrid=Gtk.Grid()
win.add(主网格)
#附加测试
标签=Gtk.标签(“Test123”)
主栅格。附着(标签,0,0,1,1)
entry=Gtk.entry()
条目。设置字符宽度(5)
主网格。附加(条目,1,0,1,1)
#好的,然后是盒子测试
标签2=Gtk.标签(“Test456”)
entry2=Gtk.Entry()
入口2.设置宽度字符(5)
box=Gtk.box()
主栅格。连接(框,0,1,2,1)
包装箱开始(标签2,假,假,0)
box.pack_start(entry2,False,False,0)
赢,全力以赴
Gtk.main()
接口()
仍然显示:


显然超过5个字符。我遗漏了什么?

Gtk计算每个小部件实际大小的方法很复杂。。。至少对我来说是这样

在本例中,您仅使用set_width_chars()设置条目的“大小请求”

将条目的大小请求更改为n_字符的正确大小。请注意,它更改了大小请求,大小仍然会受到如何将小部件打包到容器中的影响。如果n_chars为-1,则大小将恢复为默认条目大小

显示窗口或调整窗口大小时,条目请求的大小至少为n_chars width。实际上,当您减小窗口大小时,您的条目将减少,但不会超过n个字符。让我们尝试使用20个字符,这将很清楚。有5个字符,条目将减少不超过9个字符,至少在我的机器上。。。我认为,因为即使是主窗口也有一个比标签和5字符条目更大的大小请求

如果需要,可以使用set_max_width_chars()。在这种情况下,不会为条目分配大于n_字符的大小。也许这就是你想要的


如果在set_max_width_chars()和set_width_chars()中设置相同的数字,您将始终拥有相同大小的条目。

太棒了!那就行了。事实上,规则有点模糊。