可能是一个骗局,但无法找到匹配。由于它(看似)简单,但在我脑海中感觉像一个盲点,但无法弄明白。
问题是Gtk.Entry
似乎没有听取entry.set_width_chars(5)
中定义的内容,但我无法找到原因。我已经将代码缩小到简约窗口,以避免噪音:
#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class InterFace:
def __init__(self):
win = Gtk.Window()
maingrid = Gtk.Grid()
win.add(maingrid)
# the attach test
label = Gtk.Label("Test123 ")
maingrid.attach(label, 0, 0, 1, 1)
entry = Gtk.Entry()
entry.set_width_chars(5)
maingrid.attach(entry, 1, 0, 1, 1)
# ok, then the box test
label2 = Gtk.Label("Test456 ")
entry2 = Gtk.Entry()
entry2.set_width_chars(5)
box = Gtk.Box()
maingrid.attach(box, 0, 1, 2, 1)
box.pack_start(label2, False, False, 0)
box.pack_start(entry2, False, False, 0)
win.show_all()
Gtk.main()
InterFace()
仍显示:
显然超过5个字符。我错过了什么?
答案 0 :(得分:5)
Gtk计算每个小部件的实际大小的方式很复杂......至少对我而言。
在这种情况下,您只使用set_width_chars()设置条目的“大小请求”。
请参阅here
将条目的大小请求更改为n_chars字符的正确大小。请注意,它会更改大小请求,大小仍然会受到将小部件打包到容器中的方式的影响。如果n_chars为-1,则大小将恢复为默认条目大小。
当窗口显示或调整大小时,条目请求的大小至少为n_chars宽度。实际上,当您减小窗口大小时,您的条目将减少,但不会超过n_chars个字符。让我们试试20个字符,这一点很清楚。对于5个字符,条目将减少不超过9个字符,至少在我的机器上...我认为因为即使主窗口的大小请求也只比标签和5个字符条目大。
如果需要,可以使用set_max_width_chars()。在这种情况下,不会为条目指定大于n_chars的大小。也许这就是你想要的。
如果在set_max_width_chars()和set_width_chars()中设置相同的数字,则总会有一个大小相同的条目。