使用Python GTK3 Gtk.Application打开多个appwindows的正确方法

时间:2017-05-13 22:51:24

标签: python python-3.x user-interface gtk3 pygobject

我在Python3下学习GTK3并制作了一款到目前为止只有一个AppWindow的应用程序。 我使用的是Gtk.Application。

我无法弄清楚如何正确处理打开第二个窗口。 我可以直接从我的主窗口打开它,但我不知道如何将Application对象传递给它(我用googled和#34; duckduckgoed"没有任何成功)。

  • 我是否需要调用Gtk.Application来打开第二个窗口?
  • 如何让Gtk.Application跟踪这个新窗口?

应用程序是这样的:

  • 主窗口,包含数据库中的对象列表。
  • 编辑从主窗口中选择的单个项目的第二个窗口 列表。

感谢。

我的代码(我删除了不必要的代码):

# ################################################################
# MAIN APP WINDOW
class AppWindow(Gtk.ApplicationWindow):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        # Here all the widgets and a button to open the second window

        self.show_all()

# ################################################################
# MAIN APP CLASS
class Application(Gtk.Application):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, application_id=MIKUNA_ID,
                         **kwargs)
        self.window = None

    def do_startup(self):
        Gtk.Application.do_startup(self)

        action = Gio.SimpleAction.new("quit", None)
        action.connect("activate", self.on_quit)
        self.add_action(action)

    def do_activate(self):
        # We only allow a single window and raise any existing ones
        if not self.window:
            # Windows are associated with the application
            # when the last one is closed the application shuts down
            self.window = AppWindow(application=self, title="Mikuna")

        self.window.present()

    def on_quit(self, action, param):
        self.quit()

if __name__ == "__main__":
    app = Application()
    app.run(sys.argv)

1 个答案:

答案 0 :(得分:0)

  

编辑从主窗口列表中选择的单个项目的第二个窗口。

您只需从主窗口创建第二个窗口,然后可能是主窗口瞬态的Gtk.Dialog。如果它是一个你想要超出主窗口的顶层窗口,你只需要让应用程序跟踪它。