网站搜索

如何使用 PyGObject 在 Linux 桌面下创建 GUI 应用程序 - 第 1 部分


在Linux上创建应用程序可以使用不同的方式来完成,但是方法是有限的,因此使用最简单和功能最强大的编程语言和库,这就是为什么我们要快速了解如何在Linux下创建应用程序桌面使用 GTK+ 库和 Python 编程语言,称为“PyGObject”。

PyGObject 使用 GObject Introspection 为 Python 等编程语言创建绑定,PyGObject 是 PyGTK 的下一代,可以说 PyGObject=Python + GTK3。

今天,我们将开始一个关于使用 GTK+ 库和 PyGobject 语言在 Linux 桌面下创建 GUI(图形用户界面)应用程序的系列,该系列将涵盖以下主题:

关于Python

首先,你必须有一些Python基础知识; Python是一种非常现代且易于使用的编程语言。它是世界上最著名的编程语言之一,使用 Python,您将能够创建许多出色的应用程序和工具。您可以参加一些免费课程,例如 codeacademy.com 上的课程,也可以在以下位置阅读一些有关 Python 的书籍:

关于GTK+

GTK+ 是一个开源跨平台工具包,用于为桌面应用程序创建图形用户界面,它于 1998 年首次作为 GIMP 的 GUI 工具包启动,后来,它被用于许多其他应用程序和很快就成为最著名的 GUI 创建库之一。 GTK+ 在 LGPL 许可证下发布。

在 Linux 下创建 GUI 应用程序

使用 GTK+ 和 Python 创建应用程序有两种方法:

  1. 仅使用代码编写图形界面。
  2. 使用“Glade”程序设计图形界面;这是一个轻松设计 GTK+ 界面的 RAD 工具,Glade 将 GUI 生成为 XML 文件,可以使用任何编程语言来构建 GUI,导出 GUI 的 XML 文件后,我们将能够将 XML 文件与我们的程序来完成我们想要的工作。

我们将简要解释这两种方式。

仅代码方式

对于菜鸟程序员来说,仅使用代码编写 GUI 可能有点困难,而且非常浪费时间,但是使用它,我们可以为我们的程序创建非常实用的 GUI,比我们使用 Glade 等工具创建的 GUI 还要多。

让我们看下面的例子。

#!/usr/bin/python
-*- coding: utf-8 -*-

from gi.repository import Gtk

class ourwindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="My Hello World Program")
        Gtk.Window.set_default_size(self, 400,325)
        Gtk.Window.set_position(self, Gtk.WindowPosition.CENTER)

        button1 = Gtk.Button("Hello, World!")
        button1.connect("clicked", self.whenbutton1_clicked)

        self.add(button1)
        
    def whenbutton1_clicked(self, button):
      print "Hello, World!"

window = ourwindow()        
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()

复制上面的代码,将其粘贴到“test.py”文件中,并为test.py文件设置755权限,稍后使用“./test.py ”,这就是您将得到的。

nano test.py
chmod 755 test.py
./test.py

单击该按钮,您会看到终端中打印出“Hello, World!”句子:

让我详细解释一下代码。

  1. #!/usr/bin/python:Python解释器的默认路径(大多数情况下是2.7版本),该行必须是每个Python文件的第一行。
  2. # -*-coding: utf-8 -*-:这里我们设置文件的默认编码,如果要支持非英语语言,UTF-8是最好的,就这样吧。
  3. from gi.repository import Gtk:这里我们导入 GTK 3 库以在我们的程序中使用它。
  4. Class ourwindow(Gtk.Window):这里我们创建一个新类,称为“ourwindow”,我们还将类对象类型设置为“Gtk.Window”。
  5. def __init__(self):没什么新内容,我们在这里定义主窗口组件。
  6. Gtk.Window.__init__(self, title=”My Hello World Program”):我们使用这一行将“My Hello World Program”标题设置为“ourwindow”窗口,您可以更改如果你喜欢的话,标题。
  7. Gtk.Window.set_default_size(self, 400,325):我认为这一行不需要解释,这里我们设置窗口的默认宽度和高度。
  8. Gtk.Window.set_position(self, Gtk.WindowPosition.CENTER):使用这一行,我们将能够设置窗口的默认位置,在本例中,我们将其设置为中心使用“Gtk.WindowPosition.CENTER”参数,如果需要,可以将其更改为“Gtk.WindowPosition.MOUSE”以在鼠标指针位置打开窗口。
  9. button1=Gtk.Button(“Hello, World!”):我们创建了一个新的 Gtk.Button,并将其命名为“button1”,按钮的默认文本是“Hello, World!” ”,如果你愿意,你可以创建任何 Gtk 小部件。
  10. button1.connect(“clicked”, self.whenbutton1_clicked):这里我们将“clicked”信号与“whenbutton1_clicked”操作链接起来,这样当按钮被单击时,“whenbutton1_clicked”操作被激活。
  11. self.add(button1):如果我们希望我们的 Gtk 小部件出现,我们必须将它们添加到默认窗口中,这一行简单的代码将“button1”小部件添加到窗口中,这是非常有必要的做这个。
  12. defwhenbutton1_clicked(self,button):现在我们在这里定义“whenbutton1_clicked”动作,我们定义当“button1”小部件被单击时会发生什么,“(self,button )”参数对于指定信号父对象类型很重要。
  13. print“Hello, World!”:我不必在这里解释更多。
  14. window=ourwindow():我们必须创建一个新的全局变量并将其设置为 ourwindow() 类,以便稍后可以使用 GTK+ 库调用它。
  15. window.connect(“delete-event”, Gtk.main_quit):现在我们将“delete-event”信号与“Gtk.main_quit”操作连接起来,这对于删除非常重要我们自动关闭程序窗口后的所有小部件。
  16. window.show_all():显示窗口。
  17. Gtk.main():运行Gtk库。

就是这样,容易不是?如果我们想创建一些大型应用程序,那么它非常实用。有关使用纯代码方式创建 GTK+ 接口的更多信息,您可以访问官方文档网站:

Python GTK3 教程

林间空地设计师之道

就像我在文章开头所说的那样,Glade 是一个非常简单的工具,可以创建我们的程序所需的界面,它在开发人员中非常有名,许多出色的应用程序界面都是使用它创建的。这种方式称为“快速应用程序开发”。

你必须安装 Glade 才能开始使用它,在 Debian/Ubuntu/Mint 上运行:

sudo apt­-get install glade

在 RedHat/Fedora/CentOS 上,运行:

yum install glade

下载并安装程序并运行后,您将在左侧看到可用的 Gtk 小部件,单击“窗口”小部件以创建新窗口。

您会注意到创建了一个新的空窗口。

您现在可以向其中添加一些小部件,在左侧工具栏上,单击“按钮”小部件,然后单击空窗口以将按钮添加到窗口。

您会注意到按钮 ID 为“button1”,现在参考右侧工具栏中的“信号”选项卡,搜索“clicked”信号并输入“button1_clicked ”在它下面。

现在我们已经创建了 GUI,让我们导出它。单击“文件”菜单并选择“保存”,将文件保存在您的主目录中,名称为“myprogram.glade”并出口。

现在,创建一个新的“test.py”文件,并在其中输入以下代码。

#!/usr/bin/python
-*- coding: utf-8 -*-

from gi.repository import Gtk

class Handler:
    def button_1clicked(self, button):
      print "Hello, World!"

builder = Gtk.Builder()
builder.add_from_file("myprogram.glade")
builder.connect_signals(Handler())

ournewbutton = builder.get_object("button1")
ournewbutton.set_label("Hello, World!")

window = builder.get_object("window1")

window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()

保存文件,像以前一样给它 755 权限,然后使用“./test.py”运行它,这就是你将得到的。

nano test.py
chmod 755 test.py
./test.py

单击按钮,您会注意到终端中打印了“Hello, World!”句子。

现在让我们解释一下新事物:

  1. 类处理程序:这里我们创建一个名为“处理程序”的类,它将包含我们为 GUI 创建的操作和信号的定义。
  2. builder=Gtk.Builder():我们创建了一个名为“builder”的新全局变量,它是一个 Gtk.Builder 小部件,这对于导入 .glade 文件非常重要。
  3. builder.add_from_file(“myprogram.glade”):这里我们导入“myprogram.glade”文件,将其用作程序的默认 GUI。
  4. builder.connect_signals(Handler()):此行将 .glade 文件与处理程序类连接起来,以便我们在“Handler”类下定义的操作和信号在运行程序时正常工作。
  5. ournewbutton=builder.get_object(“button1”):现在我们从 .glade 文件导入“button1”对象,我们还将它传递给全局变量“ournewbutton”来使用它稍后在我们的节目中。
  6. ournewbutton.set_label(“Hello, World!”):我们使用“set.label”方法将默认按钮文本设置为“Hello,World!” “ 句子。
  7. window=builder.get_object(“window1”):这里我们从 .glade 文件中调用“window1”对象,以便稍后在程序中显示它。

就是这样!您已经成功创建了 Linux 下的第一个程序!

当然,为了创建一个真正的应用程序,需要做很多更复杂的事情,这就是为什么我建议您查看 GTK+ 文档和 GObject API:

  1. GTK+ 参考手册
  2. Python GObject API 参考
  3. PyGObject 参考

您之前在Linux桌面下开发过应用程序吗?使用什么编程语言和工具来做到这一点?您对使用 Python 和 GTK 3 创建应用程序有何看法?