Рисование моего собственного объекта на макете: проблема с наследованием gtk.drawable - PullRequest
2 голосов
/ 01 июля 2011

Я хочу нарисовать свой собственный объект на макете, поэтому я пытаюсь создать подкласс 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 '

Я могу сделать это без создания подкласса drawable, используя layout.bin_window.draw_line () в методе drawlink () моего объекта ссылки, но я не могу создать собственный графический контекст 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 Ответ

1 голос
/ 01 июля 2011

любая альтернатива?

Если я правильно вас понимаю, вы хотите не создавать подклассы gtk.gdk.Drawable, а заполнять gtk.DrawingArea виджет собственным контентом. Описание этого виджета:

Виджет gtk.DrawingArea используется для создания элементов пользовательского интерфейса. По сути, это пустой виджет, содержащий gtk.gdk.Window, который можно рисовать.

...