编程语言
首页 > 编程语言> > python-重新绘制开罗窗口?

python-重新绘制开罗窗口?

作者:互联网

我遇到了一个问题,我怀疑必须在开罗做绘画元素.

我在pygtk中有一个无边界的窗口,但我绘制了两个带有cairo.a的矩形,一个黑色矩形,一个灰色矩形.调整窗口大小时,似乎内部矩形的某些部分未绘制/绘制.我提供了3个屏幕截图来显示此问题.

如您在第二张和第三张图片中所见,窗口的某些部分没有被涂成灰色.解决此问题的一种方法是调用pygtk的window的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)

解决方法:

我相信,这基本上是GTK的错误.调整窗口大小时,GTK并不总是将整个窗口排队等待重新绘制.解决方法是,可以在导致调整窗口大小的位置调用window.queue_draw().

标签:cairo,pygtk,python
来源: https://codeday.me/bug/20191201/2082197.html