为什么不是由set-width-chars()设置的Gtk.Entry()

时间:2016-11-22 10:35:29

标签: python linux gtk3

可能是一个骗局,但无法找到匹配。由于它(看似)简单,但在我脑海中感觉像一个盲点,但无法弄明白。

问题

问题是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()

仍显示:

enter image description here

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

1 个答案:

答案 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()中设置相同的数字,则总会有一个大小相同的条目。