PyGI window 不破坏
PyGI window not destroying
这是我的 class,代表偏好。它从 'preferences.glade' 加载林间空地布局。 btn_cancel_clicked_cb 和 btn_ok_clicked_cb 在相应的按钮被激活时被调用。但是 self.destroy() 什么都不做。有人可以解释一下单击按钮后如何销毁此对话框吗?
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()
它从主要的 window 开始,像这样:
prefsview=ViewPrefs()
prefsview.register_observer(self.controller)
prefsview.run()
self
不是 self.window
。事实上,subclassing Gtk.Dialog 对于你的情况是没有用的,因为 self
的对话部分从未被使用过!如果您需要足够新的 GTK+ 版本,您可以将对话框创建为复合小部件模板并以这种方式构建您的 class(我不知道如何使用 Python 执行此操作;抱歉) .否则,摆脱 subclass 并改为调用 window.destroy()
(并且,如果 window
确实是 Gtk.Dialog
,window.run()
在您的 self.run()
).
这是我的 class,代表偏好。它从 'preferences.glade' 加载林间空地布局。 btn_cancel_clicked_cb 和 btn_ok_clicked_cb 在相应的按钮被激活时被调用。但是 self.destroy() 什么都不做。有人可以解释一下单击按钮后如何销毁此对话框吗?
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()
它从主要的 window 开始,像这样:
prefsview=ViewPrefs()
prefsview.register_observer(self.controller)
prefsview.run()
self
不是 self.window
。事实上,subclassing Gtk.Dialog 对于你的情况是没有用的,因为 self
的对话部分从未被使用过!如果您需要足够新的 GTK+ 版本,您可以将对话框创建为复合小部件模板并以这种方式构建您的 class(我不知道如何使用 Python 执行此操作;抱歉) .否则,摆脱 subclass 并改为调用 window.destroy()
(并且,如果 window
确实是 Gtk.Dialog
,window.run()
在您的 self.run()
).