ここに、私のクラスが優先権を表現しています。 'preferences.glade'からgladeレイアウトを読み込みます。対応するボタンがアクティブになると、btn_cancel_clicked_cbおよびbtn_ok_clicked_cbが呼び出されます。しかし、self.destroy()は何もしません。誰かがボタンをクリックした後にこのダイアログを破壊する方法を説明することはできますか?PyGIウィンドウが破壊されない
from gi.repository import Gtk
from common import Prefs
class ViewPrefs(Gtk.Dialog):
def __init__(self):
Gtk.Dialog.__init__(self)
self.builder = Gtk.Builder()
self.builder.add_from_file("preferences.glade")
self.builder.connect_signals(self)
self.rb_input=self.builder.get_object("rb_input")
self.rb_select=self.builder.get_object("rb_select")
def run(self, *args):
window = self.builder.get_object("window_prefs")
window.show()
window.connect('destroy', Gtk.main_quit)
Gtk.main()
def register_observer(self, controller):
self.controller = controller
def btn_cancel_clicked_cb(self,widget):
self.destroy()
def btn_ok_clicked_cb(self,widget):
active = [r for r in self.rb_input.get_group() if r.get_active()][0]
input_type=active.get_label().lower()
self.controller.set_prefs(Prefs(input_type=input_type))
self.destroy()
それはそのようなメインウィンドウから開始します:
prefsview=ViewPrefs()
prefsview.register_observer(self.controller)
prefsview.run()
'self'は' self.window'ではありません。実際、 'self'のダイアログ部分が使用されることはないので、' Gtk.Dialog'をサブクラス化することは役に立ちません! GTK +の新しいバージョンが必要な場合は、コンポジットウィジェットテンプレートとしてダイアログを作成し、そのようにクラスを構築することができます。さもなければ、サブクラスを取り除き、代わりに 'window.destroy()'を呼び出してください。 – andlabs
@andlabsありがとう! –