这是我的班级,代表优先权。它从'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()
答案 0 :(得分:2)
self
不是self.window
。事实上,为你的情况继承Gtk.Dialog是没用的,因为self
的对话框部分从未使用过!如果您需要足够新版本的GTK +,您可以将对话框创建为复合小部件模板并以这种方式构建您的类(我不知道如何使用Python执行此操作;抱歉)。否则,去掉子类并改为调用window.destroy()
(如果window
真的是Gtk.Dialog
,window.run()
中的self.run()
。