2014-11-15 1 views
1

사용자 정의 카이로 코드로 사용자 정의 GTK3 도면 영역을 렌더링하는 데 문제가 있습니다. 카이로 컨텍스트는 내가 지정한 모양으로 문제를 일으키지 않는 것으로 보입니다. 모양에 관계없이 전체 소스를 전체 대상에 씁니다.python에서 gtk 위젯에 카이로로 패스를 칠할 수 없습니다. 3

예를 들어 작은 흰색 직사각형을 칠하기 위해 완전히 흰색 소스 영역을 설정하고 카이로를 fill()으로 지정하면 해당 사각형 대신 전체 DrawingArea 위젯이 그려집니다. 내가 여기서 무엇을 놓치고 있니? 여기

#!/usr/bin/env python3 
from gi.repository import Gtk as gtk 
from gi.repository import Gdk as gdk 
import cairo 

class Canvas(gtk.DrawingArea): 
    def __init__(self): 
     gtk.DrawingArea.__init__(self) 
     self.set_size_request(600,400) 
     self.connect('draw',Canvas.on_draw) 

    def on_draw(self,context): 
     context.set_source_rgb(0.1, 0.0, 0.1) 
     context.fill() 
     context.set_source_rgb(1.0, 1.0, 1.0) 
     context.rectangle(50,50,100,100) 
     context.fill() 
     context.paint() 
     return False 

#look at this code 
class MainWindow(gtk.Window): 
    def __init__(self): 
     gtk.Window.__init__(self, title="Game Centurion") 

     self.dummy0 = gtk.Label(label="dummy₀") 
     self.canvas = Canvas() 
     self.box = gtk.Box() 

     self.box.pack_start(self.canvas, True, True, 0) 
     self.box.pack_start(self.dummy0, True, True, 0) 

     self.add(self.box) 

     self.connect('delete-event', gtk.main_quit) 

if __name__ == '__main__': 
    w = MainWindow() 
    w.show_all() 
    gtk.main() 

당신은 대신 내가 위의 코드에 지정된대로 어두운 보라색 배경 위에 작은 흰색 사각형을 갖는 완전히 흰색입니다 볼 수 있습니다, 결과 창입니다.

DrawingArea Result

어떤 도움 주셔서 감사합니다.

답변

2

오케이, 알겠습니다.

개체 contextpaint 메서드의 역할을 오해했습니다. 이전에 지정된 모든 작업을 실제로 수행하기위한 일종의 "커밋"이었지만 말입니다. 사실 그 작업은 "현장에서"(또는 돌아 오는 호출 이후에) 페인트되고 페인트는 전체 소스를 대상으로 복사하는 작업입니다.

놀랍지는 않습니다. 너무 잘.

def on_draw(self,emitter,context): 
    context.set_source_rgb(0.1, 0.0, 0.1) 
    context.paint() 
    context.rectangle(50,50,100,100) 
    context.set_source_rgb(1.0, 1.0, 1.0) 
    context.fill() 
    return False 
+0

당신이 당신의 작업 예를의 전체 버전을 게시 할 수 있습니다 : 여기

올바른 도면 콜백입니까? – Oz123

관련 문제