Python 重新粉刷开罗的窗户?
我遇到了一个问题,我怀疑这是因为在开罗画元素 我在pygtk中有一个无边界窗口,但我用cairo绘制了两个矩形。一个黑色矩形,里面一个灰色矩形。调整窗口大小时,内部矩形的某些部分似乎没有绘制/绘制。我已经包括了3个屏幕截图来显示这个问题 正如您在第二张和第三张图片中所看到的,窗户的某些部分没有被漆成灰色。解决这个问题的一种方法是调用pygtk的window的present()方法。但是这会使我的程序非常慢,因为几乎每次击键都会改变窗口的高度。所以我想知道我有什么办法来解决这个问题 下面是我使用的相关cairo代码Python 重新粉刷开罗的窗户?,python,pygtk,cairo,Python,Pygtk,Cairo,我遇到了一个问题,我怀疑这是因为在开罗画元素 我在pygtk中有一个无边界窗口,但我用cairo绘制了两个矩形。一个黑色矩形,里面一个灰色矩形。调整窗口大小时,内部矩形的某些部分似乎没有绘制/绘制。我已经包括了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)
创建cairo小部件后,请立即尝试使用以下内容:
cr.set_source_rgb(0,0,0)
cr.paint()
这将确保您始终拥有干净的画布。我相信这基本上是一个GTK+错误。调整窗口大小时,GTK+并不总是将整个窗口排队重新绘制。作为一种解决方法,您可以在调整窗口大小的位置调用window.queue_draw()。有趣的概念我没想到。然而,这并没有解决问题。