【发布时间】:2016-04-26 02:57:26
【问题描述】:
这是代表偏好的我的班级。它从“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()
像这样从主窗口开始:
prefsview=ViewPrefs()
prefsview.register_observer(self.controller)
prefsview.run()
【问题讨论】:
-
self不是self.window。实际上,为您的情况子类化Gtk.Dialog是没有用的,因为从未使用过self的对话框部分!如果您需要足够新的 GTK+ 版本,您可以将对话框创建为复合小部件模板并以这种方式构建您的类;否则,摆脱子类并调用window.destroy()。
标签: python gtk pygtk pygobject