Python 开罗刚刚展出了最后一幅画?

Python 开罗刚刚展出了最后一幅画?,python,gtk,pygtk,cairo,pycairo,Python,Gtk,Pygtk,Cairo,Pycairo,我创建了一个小部件,用于打印数据并允许用户选择: 遗憾的是,在这个屏幕截图中应该出现多个选项(此处为红色),但是由于某些原因,渲染这个模型的n个。我确保数据可用,渲染被调用并且工作正常(正确的位置和尺寸) 因此,我的小部件只是创建了一个cairo曲面,该曲面用于以下方法的迭代,以在绘制的数据线上呈现选择: def render_to(self, cairosurface): '''external trigger to redraw widget on channel widget s

我创建了一个小部件,用于打印数据并允许用户选择:

遗憾的是,在这个屏幕截图中应该出现多个选项(此处为红色),但是由于某些原因,渲染这个模型的n个。我确保数据可用,渲染被调用并且工作正常(正确的位置和尺寸)

因此,我的小部件只是创建了一个cairo曲面,该曲面用于以下方法的迭代,以在绘制的数据线上呈现选择:

def render_to(self, cairosurface):
    '''external trigger to redraw widget on channel widget surface (only within plotarea!)'''
    cr = cairosurface
    pos_x=self.__getXPos()
    w = self.__getWidth()
    h = self.__getHeight()
    eogclass=self.eogclassification.eogclass
    #background
    r,g,b=eogclass.color
    alpha=0.9
    color=(r,g,b,alpha)
    cr.set_source_rgba(*color)
    cr.rectangle(pos_x, 0, w, h)
    cr.fill()
    #label
    label=eogclass.name
    cr.set_source_rgb(*eogclass.text_color)
    cr.set_font_size(13)
    (x, y, width, height, dx, dy) = cr.text_extents(label)
    cr.move_to(pos_x+w/2 - width/2, h/2) #center within our block
    cr.text_path(label)
    cr.clip()
    cr.stroke()
    cr.paint()
有人能告诉我可能有什么问题吗?
我不确定,但这可能是合成的问题吗?

嗯,这个函数在一些背景上绘制一些文本(并且似乎删除了整个背景?)。这与我在截图中看到的任何东西都不匹配。此外,还有一个clip()调用没有撤消,因此将来更多的绘图仍将被此路径剪裁。我不知道确切原因,但我无法删除clip(),否则所有内容都将变为灰色。一种解决方法是使用cr.save()和cr.restore()封装此Stuff。无论如何,谢谢你:)我可以告诉你为什么。与clip()stroke()paint()不同的是,我认为您希望使用stroke_preserve()、fill()(尽管结果与以前略有不同,因为stroke()在路径的两侧绘制,其中的剪辑部分被剪裁掉)。