2015-07-01 6 views
1

У меня возникают проблемы с изменением цвета между текстом и строками в PangoCairoDrawingArea. Оба они имеют один и тот же цвет. Вот простой код Python:PyGTK 3 (gi.repository) PangoCairo изменение цвета между рисунком текста и строкой

from gi.repository import Gtk, Pango, PangoCairo 

class Bug(Gtk.DrawingArea): 
    def __init__ (self): 
     Gtk.DrawingArea.__init__(self) 

    def do_draw_cb(self, widget, cr): 
     cr.translate (10, 10) 

     layout = PangoCairo.create_layout (cr) 
     desc = Pango.font_description_from_string ("Sans 14") 
     layout.set_font_description(desc) 
     cr.set_source_rgba(0.0, 1.0, 0.0, 1.0) 
     layout.set_text("It is not easy being green", -1) 

     cr.move_to(40, 20) 
     cr.line_to(70, 20) 
     cr.set_source_rgba(0.0, 0.0, 0.0, 1.0) # messes up previous set_text 
     cr.stroke() 
     PangoCairo.show_layout (cr, layout) 

def destroy(window): 
     Gtk.main_quit() 

window = Gtk.Window() 
window.set_title ("Green?") 

app = Bug() 
app.set_size_request (300, 200) 

window.add(app) 

app.connect('draw', app.do_draw_cb) 
window.connect_after('destroy', destroy) 
window.show_all() 
Gtk.main() 

Если удалить второй set_source_rgba, то и текст, и линия зеленого цвета, а не как черный. Но я хочу, чтобы текст был зеленым, а черная - черной. Как мне это сделать?

ответ

3

Для макета цвет считывается, когда вы вызываете show_layout, поэтому первый set_source_rgba не имеет эффекта. Вы должны показать макет сразу после того, как вы установили его цвет.

def do_draw_cb(self, widget, cr): 
     cr.translate (10, 10) 

     layout = PangoCairo.create_layout (cr) 
     desc = Pango.font_description_from_string ("Sans 14") 
     layout.set_font_description(desc) 
     cr.set_source_rgba(0.0, 1.0, 0.0, 1.0) 
     layout.set_text("It is not easy being green", -1) 
     PangoCairo.show_layout (cr, layout) 

     cr.move_to(40, 20) 
     cr.line_to(70, 20) 
     cr.set_source_rgba(0.0, 0.0, 0.0, 1.0) # messes up previous set_text 
     cr.stroke() 
+0

Я думаю, что понимаю: поскольку я читал рисунок, он непосредственно связан с областями рисования, поэтому я думаю, что show_layout заставляет текст туда добраться. – rocky

+1

Хотя этот ответ правильный, было бы лучше и более образовательнее дать объяснение тому, что OP делал неправильно. – ptomato

+0

Спасибо, я добавил объяснение. – saeedgnu

 Смежные вопросы

  • Нет связанных вопросов^_^