2015-02-16 21 views
11

Tôi đã có một bộ nhãn trong một hộp lưu lượng, vấn đề là tôi muốn cho các nhãn này có kích thước tối đa 96px. Tôi đã đặt label.set_ellipsize (True), nhưng vì flowbox cung cấp cho họ nhiều chỗ nhất vì chúng không bị bỏ qua, mặc dù tôi đã đặt yêu cầu kích thước của chúng thành 96px.python GTK3 giới hạn chiều rộng nhãn

problem example

Tôi đã thử mọi chức năng tôi có thể thấy rằng dường như thậm chí hơi liên quan trên tất cả các vật dụng có liên quan, nhưng không có vẻ làm việc.

cách giải quyết duy nhất mà tôi tìm thấy là sử dụng set_min_children_per_line() nhưng yêu cầu tính toán số lượng trẻ em từ chiều rộng lưu lượng phụ thuộc vào số lượng trẻ em trên mỗi hàng, dẫn đến một luồng thực sự nhanh chóng.

Tôi có thể thiếu cái gì đó hiển nhiên, nhưng tôi đã bashing đầu của tôi về vấn đề này trong nhiều ngày nay.

Tôi đã thực hiện testcase này trưng bày các vấn đề khi số cột là không chia hết cho hai:

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() 
+1

Bạn đã thử ['Gtk.Label.set_max_width_chars (n_chars)'] (https://lazka.github.io/pgi-docs/Gtk-3.0/classes/Label.html#Gtk.Label.set_max_width_chars)? – elya5

+0

Tôi đã thử điều đó. nó không thay đổi một thứ gì, và nó không phải là thứ tôi muốn trong mọi trường hợp. Tôi muốn thiết lập chiều rộng theo pixel để nó khớp với các biểu tượng. – doxin

+1

Bạn có thể cung cấp một số mã không? Có lẽ có một số tài sản khác nhận được trong cách (hoặc theo mặc định hoặc thiết lập bởi bạn ở nơi khác) ... chơi với GtkLabels luôn luôn vui vẻ xx – andlabs

Trả lời

5

Vì vậy, đây là một giải pháp (vẫn không pixel chiều rộng chính xác) Bạn có thể sử dụng Gtk. Widget.set_halign để buộc không mở rộng theo chiều ngang.

Đây là một phần của mã:

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) 

Đây là những gì nó trông giống như: screeshot of the window

Tôi hy vọng tôi đã không bỏ lỡ bất cứ điều gì thời gian này.

+0

Căn chỉnh bị khấu hao. Tôi không muốn viết một chương trình mới với các tính năng được khấu hao.nó cũng vẫn không có chiều rộng pixel, vì vậy nó cũng không giải quyết được vấn đề của tôi. – doxin

+1

được cập nhật lên Gtk.Widget.set_halign – elya5

3

Bạn có một tùy chọn khác: sử dụng triển khai GtkContainer tùy chỉnh giới hạn con của nó thành độ rộng pixel chính xác. Theo Erick Pérez Castellanos trên irc.gimp.net/#gtk+, GNOME Contacts có một; here it is. Đó là trong Vala, nhưng nó không nên là quá khó khăn để quấn đầu của bạn xung quanh cùng với một số đọc của GtkWidget và GtkContainer (và GtkBin) ngữ nghĩa. Thật không may tôi không biết làm thế nào để tạo ra GObjects mới trong Python, xin lỗi.

Nếu bạn sử dụng cách tiếp cận trong Danh bạ GNOME, vùng chứa tùy chỉnh (có nguồn gốc từ GtkBin, một tiện ích cho GtkContainers một con) sẽ chỉ giữ GtkLabel của bạn và bạn thêm nó vào GtkVBox của mục hộp chứa.

Hy vọng điều đó sẽ hữu ích.

Các vấn đề liên quan