首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用GTK4而不使用“`Application`”类?

如何使用GTK4而不使用“`Application`”类?
EN

Stack Overflow用户
提问于 2022-06-28 19:59:06
回答 1查看 260关注 0票数 0

请注意应用程序是如何通过activate信号和.run()方法调用实现主循环的:

代码语言:javascript
复制
import gi
gi.require_version("Gtk", "4.0")
from gi.repository import Gtk

def on_activate(app):
    win = Gtk.ApplicationWindow(application=app)
    btn = Gtk.Button(label="Hello, World!")
    btn.connect('clicked', lambda x: win.close())
    win.set_child(btn)
    win.present()

app = Gtk.Application(application_id='org.gtk.Example')
app.connect('activate', on_activate)
app.run(None)

更正一下:我认为这个activate信号是作为一个事件发出的,用于同步创建GTK窗口、小部件等,这样在应用程序准备好之前,GUI部件就不会发生竞争。还有什么要说的?

然后,当窗口、小部件等全部绘制完毕时,应用程序就会被.run()卡在一个主循环中。这样,应用程序不会立即退出,而是等待用户输入。

让我烦恼的是,我看不到Application类的价值。正因为如此,我们在信号activate上有一个事件告诉“哦,应用程序已经准备好了”,但是这个应用程序到底是什么呢?为什么我不能直接在.run()上做Gtk.ApplicationWindow,甚至Gtk.Window

为了回答上述问题,我发明/发现了这样一个问题,如果得到回答,我认为它将解决我的沮丧:

问题:,在不使用ApplicationApplicationWindow类的情况下,运行GUI应用程序的GT4方法是什么?

背景

我来自TKinter背景。在那里,我可以简单地说出这样的话来制作一个应用程序:

代码语言:javascript
复制
import tkinter

class MyApp(tkinter.Tk):
    def __init__(self):
        super().__init__()
        self.title('some title')

if __name__ == '__main__':
    myapp = MyApp()
    myapp.mainloop()

它感觉简单得多,没有创建两个对象的意大利面(比如在GTK4中),通过它们发出的信号仅仅是为了得到一个.run()主循环。

但是我必须在这个项目中使用GTK4,Tkinter不是一个选项。所以我必须为我学习合适的GTK4。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-28 23:23:16

根据文档:"GtkApplication是用于编写应用程序的高级API。

它支持以一种方便的方式编写GTK应用程序的许多方面,而无需强制执行一刀切的模型。

目前,GtkApplication处理GTK初始化、应用程序唯一性、会话管理,通过导出操作和菜单提供一些基本的脚本性和桌面shell集成,并管理一个toplevel窗口列表,这些窗口的生命周期自动绑定到应用程序的生命周期。虽然GtkApplication在普通GtkWindows中运行良好,但建议与GtkApplicationWindow一起使用它。“

来源:https://docs.gtk.org/gtk4/class.Application.html

来自Gtk3的不会在Gtk4上工作。

这样做是可行的:

代码语言:javascript
复制
import gi

gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

win = Gtk.Window()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

但是,如果将"3.0“改为"4.0”不起作用,原因是迁移指南:

"GTK 4删除了gtk_main_*系列的API。推荐的替代方法是GtkApplication“

主要及相关的api

Gtk对Tk有一种不同的方法,您需要使用它。

而且GTK4仍然是新的,您将找到更多关于Gtk3代码的示例,因此,请将迁移指南放在手边。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72792476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档