调用函数的Gio SimpleAction

2024-10-02 22:28:57 发布

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

我在Gtk3应用程序中使用Gio操作制作了菜单。 菜单项创建为:

#in main file
MenuElem = menu.MenuManager
# Open Menu
action = Gio.SimpleAction(name="open")
action.connect("activate", MenuElem.file_open_clicked)
self.add_action(action)

file_open_clicked位于menu.pyclass MenuManager,定义为:

^{pr2}$

我收到错误:

Traceback (most recent call last):
  File "/home/rudra/Devel/mkbib/Python/src/menu.py", line 81, in file_open_clicked
    self.TreeView.bookstore.clear()
AttributeError: 'SimpleAction' object has no attribute 'TreeView'

我知道SimpleAction还有一个选项,应该调用TreeView。 但我不知道怎么做。 请帮忙


Tags: inpyself应用程序actionopenfilemenu
2条回答

您的问题是,TreeView属性只存在于MenuManager类上,而当您调用file_open_clicked方法时,第一个参数(self)是创建的SimpleAction对象。使用MenuManager实例的file_open_clicked方法可以解决这个问题。在

menu_manager = MenuManager()
action = Gio.SimpleAction(name="open")
action.connect("activate", menu_manager.file_open_clicked)

我来帮你把代码分解一下。在

#in main file
MenuElem = menu.MenuManager

这里您将MenuElem设置为指向menu.MenuManager类。可能您打算在这里初始化对象,使MenuElem成为menu.MenuManager类的实例。从而调用了MenuManager类的__init__函数。因此,代码应为:

^{pr2}$

下一个出问题的地方在这里:

def file_open_clicked(self, widget):

如果我们检查docsactivate信号,我们会发现它有2个参数。所以目前没有初始化对象self被设置为第一个参数,即SimpleAction,而{}被设置为激活parameter。在

但是现在我们已经初始化了MenuManager对象,file_open_clicked函数将获得3个输入参数,即selfSimpleAction和{}。因此,我们需要这样接受它们:

def file_open_clicked(self, simpleAction, parameter):

现在代码的工作原理是self实际上是一个具有TreeView属性的对象。(仅供参考,Python中的变量和属性通常都是小写的)

相关问题 更多 >