重写PyGObj中的虚拟方法

2024-10-04 03:16:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在GTK中用Python为我的自定义小部件实现Heigh-for-width Geometry Management。我的小部件是Gtk.DrawingArea中的一个子类,用于绘制图像的某些部分。在

据我所知,GTK文档(上面的链接)我必须实现以下4种方法:

  • 在GtkWidgetClass.get_首选宽度()
  • 在GtkWidgetClass.get_首选高度()
  • 在GtkWidgetClass.get_preferred_height_宽度()
  • 在GtkWidgetClass.get_preferred_width_高度()

现在想知道在Python中在哪里实现它。在

我试过了:

from gi.repository import Gtk
class Patch(Gtk.DrawingArea):
  def __init__(self, model, image, position):
    super(Patch,self).__init__()
    #…

  def get_preferred_width(self, *args, **kargs):
    print("test")

  def get_preferred_height(self, *args, **kargs):
    print("test")

  def get_preferred_width_for_height(self, *args, **kargs):
    print("test")

  def get_preferred_height_for_width(self, *args, **kargs):
    print("test")

但方法不会被调用。在C中,定义函数并将其设置为小部件,如下所示:

^{pr2}$

这是如何在Python中实现的?在


Tags: testselfgtkforget部件defargs
1条回答
网友
1楼 · 发布于 2024-10-04 03:16:20

您必须将这些方法命名为do_virtual_method

from gi.repository import Gtk
class Patch(Gtk.DrawingArea):
  def __init__(self):
    super(Patch,self).__init__()

  def do_get_preferred_width(self):
    print("test")
    return 100, 100

  def do_get_preferred_height(self):
    print("test")
    return 100, 100

win = Gtk.Window()
win.add(Patch())
win.connect('destroy', Gtk.main_quit)
win.show_all()
Gtk.main()

请注意,您还必须返回虚拟方法要求您返回的值,否则您将得到一个神秘的错误。在

相关问题 更多 >