2011-07-01 62 views
2

我想提請我自己的一個佈局對象的問題,所以我想繼承gdk.drawable,繪製自己的對象上的佈局:與子類gtk.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 

錯誤:

cannot create instance of abstract (non-instantiable) type `GdkDrawable'

我可以不用在方法drawlink使用我的鏈接對象的layout.bin_window.draw_line()()繪製的子類,但我不能爲每個對象自定義圖形上下文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) 

這就是我想要繪製子類的原因。如果我可以使用自定義gc而無需繪製子類或(window,pixmap),那就太棒了。

感謝

回答

1

any alternative?

如果我理解正確的話,你想做的事是不是繼承gtk.gdk.Drawable但填充一個gtk.DrawingArea構件用自己的內容。該插件的描述是:

The gtk.DrawingArea widget is used for creating custom user interface elements. It's essentially a blank widget containing a gtk.gdk.Window that you can draw on.

+0

嗨,我想畫一條線(鏈接)來連接兩個對象COMP1和COMP2,這兩個目標都從按鈕的子類,我不需要任何的窗口。如果這是唯一的方法,是否有可能使矩形窗口透明,因此它只顯示鏈接?(我正在繪製佈局) – OpenI

+0

@Openl - 您需要一個頂層容器(窗口,對話框) 。窗口的不透明度可以通過[set_opacity]設置(http://www.pygtk.org/docs/pygtk/class-gtkwindow.html#method-gtkwindow--set- opacity)。 – mac

+0

我可以做到這一點,包括layout.bin_window.draw_line()在我的鏈接對象的方法drawlink(),但我無法創建自定義grafic上下文gdk.gc,我不得不使用layout.get_style()這對我所有的鏈接都是一樣的!這就是我想要繪製子類的原因。如果我可以使用自定義gc而無需繪製子類或(window,pixmap),那就太棒了。所以,謝謝你的支持,但我真的非常喜歡你的方法作爲最後的手段(請告訴我,如果你知道你的解決方案是最好的) – OpenI