【问题标题】:PyGI window not destroyingPyGI窗口没有破坏
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多