这是我的班级,它代表的是优先权。它从‘Preences.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()发布于 2016-04-25 18:57:26
self不是self.window。实际上,对于您的情况,子类Gtk.Dialog是无用的,因为从未使用self的对话框部分!如果您需要一个新的足够版本的GTK+,您可以将对话框创建为复合小部件模板,并以这种方式构建类(我不知道如何使用Python来实现这一点;对不起)。否则,去掉子类并调用window.destroy() (如果window确实是一个Gtk.Dialog,则调用self.run()中的window.run() )。
https://stackoverflow.com/questions/36815331
复制相似问题