在布局上绘制我自己的对象:子类化gtk.drawable的问题

时间:2011-07-01 09:59:43

标签: python gtk pygtk

我想在布局上绘制自己的对象,所以我试图继承gdk.drawable,

class link(gtk.gdk.Drawable):
  def __init__(self,comp1,comp2,layout):
      super(link, self).__init__()
      self.x1=comp1.xpos
      self.y1=comp1.ypos
      self.x2=comp2.xpos
      self.y2=comp2.ypos
      self.layout=layout

错误:

  

无法创建抽象(非实例化)类型`GdkDrawable'

的实例

我可以在我的链接对象的方法drawlink()中使用layout.bin_window.draw_line()继承drawable而无法创建它,但是我无法为每个对象创建自定义图形上下文gdk.gc而且我有使用layout.get_style(),这对我的所有链接都是一样的!

  def drawlink(self):
    gc = self.layout.get_style().fg_gc[gtk.STATE_NORMAL]
    gc.line_style=gtk.gdk.LINE_ON_OFF_DASH
    gc.line_width=6
    self.layout.bin_window.draw_line(gc,self.x1, self.y1, self.x2, self.y2) 

这就是我想要子类drawable的原因。如果我可以使用自定义gc而不用子类化drawable或(window,pixmap)那就太棒了。

由于

1 个答案:

答案 0 :(得分:1)

  

任何替代方案?

如果我理解正确,那么您要做的不是为gtk.gdk.Drawable创建子类,而是使用您自己的内容填充 gtk.DrawingArea小部件。该小部件的描述是:

  

gtk.DrawingArea窗口小部件用于创建自定义用户界面元素。它本质上是一个包含gtk.gdk.Window的空白小部件,您可以使用它。