dox*_*xin 11 python gtk label width gtk3
我在流程盒中有一组标签,问题是我希望这些标签最多可以达到96px.我已经设置了label.set_ellipsize(True),但由于flowbox为他们提供了尽可能多的空间,所以即使我已将其大小请求设置为96px宽,也不会进行椭圆化处理.

我已经尝试了我能找到的所有功能,这些功能似乎与所涉及的所有小部件相关,但似乎没有任何效果.
我找到的唯一解决方法是使用set_min_children_per_line(),但这需要计算流量宽度中的子节点数,这取决于每行子节点的数量,从而导致流量变得非常快.
我可能错过了一些显而易见的事情,但我已经在这几天抨击这个问题了.
我已经制作了这个测试用例,当列数不能被2整除时,它会出现问题:
from gi.repository import Gtk as gtk
from gi.repository import Pango as pango
class Widget(gtk.VBox):
def __init__(self,label):
gtk.VBox.__init__(self)
image=gtk.Image.new_from_icon_name("image-missing",gtk.IconSize.DIALOG)
image.set_size_request(96,96)
self.add(image)
lbl=gtk.Label(label)
self.add(lbl)
class TestCase(gtk.Window):
def __init__(self):
gtk.Window.__init__(self)
lbl=gtk.Label("some text")
scrollbox=gtk.ScrolledWindow()
self.add(scrollbox)
flowbox=gtk.FlowBox()
scrollbox.add(flowbox)
for i in range(50):
w=Widget("longlabel"*5)
flowbox.add(w)
w=Widget("short")
flowbox.add(w)
if __name__=="__main__":
w=TestCase()
w.connect("delete-event",gtk.main_quit)
w.show_all()
gtk.main()
Run Code Online (Sandbox Code Playgroud)
所以这是一个解决方案(仍然不是确切的像素宽度)您可以使用Gtk.Widget.set_halign强制不进行水平扩展.
这是代码的一部分:
lbl=gtk.Label(label)
lbl.set_max_width_chars(5)
lbl.set_ellipsize(pango.EllipsizeMode.END)
lbl.set_halign(gtk.Align.CENTER)
self.add(lbl)
Run Code Online (Sandbox Code Playgroud)
这就是它的样子:

我希望这次我没有错过任何一件事.
| 归档时间: |
|
| 查看次数: |
1778 次 |
| 最近记录: |