Python と PyGObject を学習しようとしているので、ユーザーが入力した 2 つの数値を加算して結果を表示する簡単なプログラムを作成し、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 に設定されている場合、このスクリーンショットに見られるように Glade を使用して加算結果 first_number + second_number を保持する Label オブジェクト:
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)
を作成するuser_data=None
と、出力は次のようになります。
(<__main__.GUI instance at 0xb6dd458c>,
<Label object at 0x99c393c (GtkLabel at 0x9aeaa28)>, -6, None)
空き地に user_data を設定しないと、出力は次のようになります。
(<__main__.GUI instance at 0xb6d3e58c>,
<AboutDialog object at 0xa09711c (GtkAboutDialog at 0xa191040)>, -6, None)
したがって、GtkDialog *dialog パラメータのみが変更されます。ここでわかるように、信号response
は 3 つのパラメーターをスローしますが、この場合は 2 つしかスローしないため、これを理解できません。
ここで何が起こっているのですか? Gtk.Dialog 応答信号が 3 つではなく 2 つの引数を吐き出すのはなぜですか?