PyGI窗口没有破坏

时间:2016-04-23 19:19:34

标签: python gtk pygtk pygobject

这是我的班级,代表优先权。它从'preferences.glade'中加载了林间空地布局。激活相应的按钮时,将调用btn_cancel_clicked_cb和btn_ok_clicked_cb。但是self.destroy()并没有做任何事情。有人可以解释如何在单击按钮后销毁此对话框吗?

CREATE OR REPLACE TRIGGER trg_ot
BEFORE INSERT ON company_timesheet
FOR EACH ROW
DECLARE t_contracted NUMBER;
BEGIN
    SELECT grade_hours INTO t_contracted
    FROM company_grade
    WHERE company_employee.emp_id = :new.timesheet_emp;
END;
/

它从主窗口开始:

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()

1 个答案:

答案 0 :(得分:2)

self不是self.window。事实上,为你的情况继承Gtk.Dialog是没用的,因为self的对话框部分从未使用过!如果您需要足够新版本的GTK +,您可以将对话框创建为复合小部件模板并以这种方式构建您的类(我不知道如何使用Python执行此操作;抱歉)。否则,去掉子类并改为调用window.destroy()(如果window真的是Gtk.Dialogwindow.run()中的self.run()