pycharm 错误:无法创建抽象(不可示例化)类型“GtkBox”的示例

7z5jn7bk  于 2023-01-05  发布在  PyCharm
关注(0)|答案(2)|浏览(159)

我有错误时运行此代码:

from gi.repository import Gtk
class MainWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="")
        # box
        self.box = Gtk.Box(spacing=10)
        self.add(self.box)
        # bacon button
        self.bacon_button = Gtk.Button(label="Bacon")
        self.bacon_button.connect("clicked", self.bacon_clicked)
        self.box.pack_start(self.bacon_button, True, True,0)
        # tuna button
        self.tuna_button = Gtk.Button(label="Tuna")
        self.tuna_button.connect("clicked", self.tuna_clicked)
        self.box.pack_start(self.tuna_button, True, True,0)
    def bacon_clicked(self, widget):
        print("You clicked Bacon")
    def tuna_clicked(self, widget):
        print("You clicked Tuna")

window = MainWindow()
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()

输出端错误:

File "/Users/*********/Documents/Program/Tutorial/venv/lib/python3.11/site-packages/gi/overrides/__init__.py", line 319, in new_init
    return super_init_func(self, **new_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: cannot create instance of abstract (non-instantiable) type `GtkBox'
Process finished with exit code 1

我目前正在使用python3并且已经在PyCharm中安装了PyGObject包

vi4fp9gy

vi4fp9gy1#

不要直接使用Box。如果你想要一个以pack_start水平增长的Box,请使用Gtk.HBox(文档here)。
如果您希望它垂直增长,请使用Gtk.VBox(文档here)。
话虽如此,更现代的(GTK4)做事方式是对所有事情都使用Gtk.Grid

h5qlskok

h5qlskok2#

您的代码加载的是GTK 2,而不是GTK 3;在GTK 2.x中,GtkBox实际上是一个抽象类型。
如果你想使用GTK 3.x,你需要添加:

import gi
gi.require_version('Gtk', '3.0')

在导入Gtk命名空间之前,在顶部。

相关问题