2012-01-09 31 views
7

Tôi có đoạn code sau, sử dụng pygtk:Pango thuộc tính với pygobject

attr = pango.AttrList() 
attr.change(pango.AttrSize((
      50 * window_height/100) * 1000, 0, -1)) 
attr.change(pango.AttrFamily("Sans", 0, -1)) 
attr.change(pango.AttrWeight(pango.WEIGHT_BOLD, 0, -1)) 
attr.change(pango.AttrForeground(65535, 65535, 65535, 0, -1)) 

self.label.set_attributes(attr) 

Tôi đang cố gắng đến cổng nó để pygobject, nhưng không có lớp Pango.AttrFamily, không Pango.AttrWeight, không Pango .AttrForeground (và tôi không thể khởi tạo một Pango.AttrSize).

Câu hỏi đặt ra là: cách sử dụng pango_attr_size_new, pango_attr_weight_new, pango_attr_family_newpango_attr_foreground_new thông qua sự thiếu sót?

Tôi biết tôi có thể sử dụng markup để làm điều này, nhưng 1. sử dụng thuộc tính sẽ giữ cho mọi thứ đơn giản hơn và 2. Tôi muốn biết điều gì đang xảy ra ở đây! Tôi đã dành rất nhiều thời gian để giải quyết nó.

+0

Bạn có nhận được bất cứ nơi nào với điều này không? Im có cùng một vấn đề. –

+0

FIY, đây là vấn đề liên quan: https://bugzilla.gnome.org/show_bug.cgi?id=646788 (không thay đổi kể từ năm 2014) –

+0

Điều này chưa được khắc phục. Nhưng bạn có thể giải quyết vấn đề này bằng cách sử dụng hệ thống CSS mới: '#mylabel {color: blabla; vv;} ', đặt' self.label.set_name ("mylabel") 'và sau đó nhập tệp CSS' Gtk.CssProvider.load_from_file (Gtk.CssProvider_get_default(), tệp) '. –

Trả lời

1

Edit: Là phương pháp override_font bị phản đối, bạn nên sử dụng CSS như được mô tả tại trang này - https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-override-font

Phần còn lại của câu trả lời vẫn cho các mục đích lịch sử.

Tôi không biết tại sao điều đó không hiệu quả.

Đây là phương pháp để thực hiện.

def set_global_styles(self, editor_widget): 
    pango_context = editor_widget.create_pango_context() 
    font_description = pango_context.get_font_description() 
    increase = 14 #pt 14 
    font_size = 1024*increase 
    font_description.set_size(font_size) 
    editor_widget.override_font(font_description) 

Cho đến nay, cách dễ nhất tôi tìm thấy để thực hiện. Trả lời muộn, nhưng muộn hơn không bao giờ.

Chỉ trong trường hợp một số tài nguyên cho Pango và sử dụng mã ở trên. Tôi không chắc liệu tất cả tài liệu về Pango có áp dụng cho gtk3 hay không, nhưng nó có hiệu quả đối với tôi.

Pango context set font description

Pango font description

Pango fonts in gtk

Pango layout

GtkWidget inherited by text editors giữa các đối tượng khác.

+0

Không sử dụng mã này. 'override_font' đã không được chấp nhận. https: //developer.gnome.org/gtk3/stable/GtkWidget.html # gtk-widget-ghi đè phông chữ –

0

từ mail này tôi thấy rằng đây chạy mà không có lỗi runtime:

from gi.repository import Pango 

    ren = Gtk.CellRendererText() 
    ren.set_property('alignment', Pango.Alignment.RIGHT) 

mặc dù trong mã của tôi điều này không làm cho nội dung sắp xếp ở bên phải, nhưng tôi có thể có một lỗi trong mã của tôi. Quan trọng nhất ở đây là mã ở trên dường như là bản dịch cho các công cụ pygtk như import pango và: pango.ALIGN_RIGHT

Đây không phải là câu trả lời hoàn chỉnh cho OP, nhưng hy vọng một bước gần hơn.

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