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