2012-03-11 36 views
3

我遇到了一個問題,我懷疑必須在開羅繪畫/繪畫元素。重新粉刷開羅窗戶?

我在pygtk中有一個無邊界的窗口,但是我畫了兩個帶cairo.a黑色矩形的矩形,裏面有一個灰色的矩形。調整窗口大小時,似乎內部矩形的某些部分不會被繪製/繪製。我已經包含3個截圖來展示這個問題。

enter image description here enter image description here enter image description here

正如你在第二和第三圖片中看到,窗口的一些作品沒有得到漆成灰色。解決這個問題的一種方法是調用pygtk的窗口的present()方法..但是這會讓我的程序非常慢,因爲窗口的高度隨着每個按鍵的變化而變化。所以我想知道我有什麼替代方案來解決這個問題。下面

是相關開羅代碼我使用

def expose(self, widget, e): 
    cr = widget.window.cairo_create() 

    # Draw the background 
    cr.set_operator(cairo.OPERATOR_SOURCE) 

    # Create black rectangle with 60% opacity (serves as border) 
    (width, height) = widget.get_size() 
    cr.set_source_rgba(0, 0, 0, 0.6) 
    cr.rectangle(0, 0, width, height) 
    cr.fill() 

    # Inside the black rectangle, put a lighter one (will hold widgets) 
    (width, height) = widget.get_size() 
    cr.set_source_rgb(205/255, 205/255, 193/255) 
    cr.rectangle(10, 10, width-20, height-20) 
    cr.fill() 

    return False 

def screen_changed(self, widget, old_screen = None): 
    screen = widget.get_screen() 
    colormap = screen.get_rgba_colormap() 
    widget.set_colormap(colormap) 

回答

2

我相信它基本上是一個GTK + bug。調整窗口大小時,GTK +並不總是將整個窗口排隊重繪。作爲一種解決方法,您可以在導致調整窗口大小的位置調用window.queue_draw()。

+0

這是做到了。謝謝。 – sqram 2012-03-17 02:53:07

1

使用下列您創建控件開羅後立即嘗試:

cr.set_source_rgb(0,0,0) 
cr.paint() 

這將確保你總是有一個乾淨的畫布。

+0

啊。有趣的概念,我沒有想到。然而,它並沒有解決問題。 – sqram 2012-03-17 00:45:53