错误 无法创建抽象(不可实例化)类型"GtkBox"python3的实例



运行这段代码时出现错误:

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包

您的代码正在加载GTK2,而不是GTK3;在GTK 2中。x,GtkBox确实是一个抽象类型

如果您想使用GTK 3。X,您需要添加:

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

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

不要直接使用Box。如果你想要一个与pack_start水平生长的Box,使用Gtk.HBox(在这里有文档说明)。

如果你想让它垂直生长,使用Gtk.VBox(文档在这里)。

话虽这么说,更现代的(GTK4)做事的方式是使用Gtk.Grid的一切。

相关内容

  • 没有找到相关文章

最新更新