3

我正在尝试学习 Python 和 PyGObject,所以我编写了一个简单的程序,添加用户输入的两个数字并显示结果并使用 Glade 创建用户界面。

在此处输入图像描述

在此处输入图像描述

它还有一个关于对话框。但是,每当我想处理response来自 的信号about_dialog时,当我点击关闭按钮或x窗口标题时给出的信号时,解释器都会给出TypeError.

这是完整代码的相关部分其中包含 Glade 文件:

...
class GUI():
...
    signalHandler = {
            'on_main_window_destroy': Gtk.main_quit,
            'on_button_quit_clicked': self.on_button_quit_clicked,
            'on_button_about_clicked': self.on_button_about_clicked,
            'on_button_add_clicked': self.on_button_add_clicked,
            'about_response':self.about_response
    }
    self.builder.connect_signals(signalHandler)
...
    def about_response(self, widget, response_id, user_data=None):
    # self.about_dialog.destroy()
    print(widget, response_id, user_data)
    print('About dialog closed.')
....

当函数在下面并且当 user_data 设置为 labelresult 标签对象时,该对象保存了加法结果 first_number + second_number,使用 Glade 可以在屏幕截图中看到:

def about_response(self, widget, response_id, user_data):

下面的输出是:

print(self, widget, response_id, user_data)
Output: TypeError: about_response() takes exactly 4 arguments (3 given)

当我 makeuser_data=None时,输出是:

(<__main__.GUI instance at 0xb6dd458c>,
<Label object at 0x99c393c (GtkLabel at 0x9aeaa28)>, -6, None)

如果没有在 glade 中设置 user_data,则输出为:

(<__main__.GUI instance at 0xb6d3e58c>,
<AboutDialog object at 0xa09711c (GtkAboutDialog at 0xa191040)>, -6, None)

所以,它只改变 GtkDialog *dialog 参数。我无法理解这一点,因为正如我在这里看到的,信号response抛出 3 个参数,但在这种情况下,它只抛出 2 个。

这是怎么回事,为什么 Gtk.Dialog 响应信号吐出 2 个参数而不是 3 个?

4

0 回答 0