gpt4 book ai didi

python - 在 Python 中构建 Gtk3 应用程序的正确方法

转载 作者:IT老高 更新时间:2023-10-28 21:01:32 26 4
gpt4 key购买 nike

我刚刚开始学习如何在 Python 中创建 GUI 应用程序。我决定使用 Gtk 版本 3。根据 http://python-gtk-3-tutorial.readthedocs.org/ 上的(官方?)教程构建 hello world 应用程序的正确方法是:

from gi.repository import Gtk

class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
self.set_default_size(200, 100)
self.connect('destroy', Gtk.main_quit)
self.show_all()

MyWindow()
Gtk.main()

在其他教程(http://www.micahcarrick.com/gtk3-python-hello-world.html)中,我发现完全不同的方法是:

from gi.repository import Gtk, Gio

class HelloWorldApp(Gtk.Application):
def __init__(self):
Gtk.Application.__init__(self, application_id="apps.test.helloworld",
flags=Gio.ApplicationFlags.FLAGS_NONE)
self.connect("activate", self.on_activate)

def on_activate(self, data=None):
window = Gtk.Window(type=Gtk.WindowType.TOPLEVEL)
window.set_title("Gtk3 Python Example")
window.set_border_width(24)
label = Gtk.Label("Hello World!")
window.add(label)
window.show_all()
self.add_window(window)

if __name__ == "__main__":
app = HelloWorldApp()
app.run(None)

在这个领域有经验的人能告诉我这些天我应该以什么方式在 python 中编写 Gtk 3 应用程序?我已经熟悉编写 GUI(在 Java 的 Swing 中花了几个月的时间),因此您可以继续使用事件、回调等术语。

最佳答案

选择使用 GtkApplication 还是仅使用 GtkWindow 来编写新程序取决于您需要的功能,在某种程度上还取决于目标受众。

对于大多数情况,尤其是当您仍在学习工具包时,我倾向于同意 valmynd 的观点,即 GtkApplication 过于复杂。 GtkApplication 提供了许多您在小型应用程序中可能不需要或不需要的额外功能。

对于更大、更完整的应用程序,我同意 Dragnucs 的观点,第二种方法更优越,可以更好地集成到桌面环境中。来自 GNOME Goal: Port to GtkApplication (另见 GtkApplication 文档):

Porting your application to use GtkApplication has quite nice benefits: GtkApplication handles GTK+ initialization, application uniqueness, session management, provides some basic scriptability and desktop shell integration by exporting actions and menus and manages a list of toplevel windows whose life-cycle is automatically tied to the life-cycle of your application.

但是我不同意 Dragnucs 关于为什么在教程中引入 GtkWindow 方法。我倾向于认为带有很少样板的简单示例更适合教程入门部分(但是,我确实认为需要更新阅读文档教程以至少包含一些提及GtkApplication)。

在我编写的应用程序中,我倾向于将 GtkApplication 和 GtkWindow 子类化,或者对于单窗口 quick-and-nasty 应用程序,我倾向于将 GtkWindow 子类化。您的决定将取决于您的应用需求。

技术差异:这两个示例的实现方式之间还有一个重要的技术差异。仅带有 GtkWindow 的示例为程序的每个实例创建了一个新的 Gtk 主循环。带有 GtkApplication 的示例创建了一个附加到第一个实例的主循环,并且对 run(None) 的每个后续调用都将请求原始实例创建一个新窗口(然后新实例将退出)。尝试打开两个终端并在每个窗口中运行您的应用程序,注意一个终端将等到所有窗口都关闭后再变得敏感。您可以使用 G_APPLICATION_NON_UNIQUE 而不是 G_APPLICATION_FLAGS_NONE 来更改此行为。

关于python - 在 Python 中构建 Gtk3 应用程序的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20907897/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com