我正在尝试学习 Python 和 PyGObject,所以我编写了一个简单的程序,添加用户输入的两个数字并显示结果并使用 Glade 创建用户界面。
它还有一个关于对话框。但是,每当我想处理response
来自 的信号about_dialog
时,当我点击关闭按钮或x
窗口标题时给出的信号时,解释器都会给出TypeError
.
...
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 个?