我遇到了一个问题,我怀疑与cairo绘制元素有关。我在pygtk中有一个无边框的窗口,但是我用cairo画了两个矩形,一个黑色矩形和一个内部灰色矩形。当调整窗口大小时,似乎有部分内部矩形没有被绘制/涂色。我包括了3张截图以显示这个问题。
正如您在第二和第三张图片中所看到的那样,窗口的某些部分没有被绘制成灰色。解决此问题的一种方法是调用pygtk窗口的present()方法,但这会使我的程序非常缓慢,因为窗口的高度几乎每次按键都会更改。所以我想知道有哪些替代方案可以解决这个问题。
下面是我使用的相关cairo代码:
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)