如何使用 PyGObject 在 Linux 中创建 GUI 应用程序
创建图形用户界面 (GUI) 应用程序是将您的想法变为现实并使您的程序更加用户友好的绝佳方式。
PyGObject 是一个 Python 库,允许开发人员使用 GTK (GIMP Toolkit) 框架在 Linux 桌面上创建 GUI 应用程序。 GTK 广泛应用于 Linux 环境中,为许多流行的桌面应用程序提供支持,例如 Gedit、GNOME 终端 等。
在本文中,我们将探讨如何使用 PyGObject 在 Linux 桌面环境下创建 GUI 应用程序。我们将首先了解 PyGObject 是什么、如何安装它,然后继续构建一个简单的 GUI 应用程序。
第1步:在Linux中安装Python和GTK
要使用 PyGObject,您需要安装 Python,并且当今大多数 Linux 发行版都预装了 Python,但您可以通过运行进行确认:
python3 --version
Python 3.12.3
如果未安装 Python,您可以使用以下适合您的特定 Linux 发行版的命令来安装它。
sudo apt install python3 [On Debian, Ubuntu and Mint]
sudo dnf install python3 [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apk add python3 [On Alpine Linux]
sudo pacman -S python [On Arch Linux]
sudo zypper install python3 [On OpenSUSE]
现在,您需要安装 Python 的 PyGObject 绑定以及 GTK 开发库。
sudo apt install python3-gi gir1.2-gtk-3.0 [On Debian, Ubuntu and Mint]
sudo dnf install python3-gobject gtk3 [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apk add py3-gobject gtk+3 [On Alpine Linux]
sudo pacman -S python-gobject gtk3 [On Arch Linux]
sudo zypper install python3-gobject gtk3 [On OpenSUSE]
第2步:在Linux中安装PyGObject
安装 Python 和 GTK 开发库后,您现在可以使用以下适合您的特定 Linux 发行版的命令安装 PyGObject。
sudo apt install python3-gi [On Debian, Ubuntu and Mint]
sudo dnf install pygobject3 [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apk add py3-gobject [On Alpine Linux]
sudo pacman -S python-gobject [On Arch Linux]
sudo zypper install python3-gobject [On OpenSUSE]
安装后,您就可以开始使用 PyGObject 和 GTK 开发 GUI 应用程序了。
在 Linux 中创建第一个 PyGObject GUI 应用程序
现在,让我们构建一个简单的 PyGObject 应用程序,该应用程序显示带有按钮的窗口。单击该按钮时,将显示一条消息“Hello, World!”。
创建一个名为 app.py
的 Python 文件,让我们开始编写 PyGObject 应用程序的基本结构。
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
class MyApp(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Hello World App")
self.set_size_request(300, 100)
# Creating a button and adding it to the window
button = Gtk.Button(label="Click Me")
button.connect("clicked", self.on_button_clicked)
self.add(button)
def on_button_clicked(self, widget):
print("Hello, World!")
Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit) # Close the app when window is closed
app.show_all()
Gtk.main()
代码解释:
- 前两行导入必要的 PyGObject 模块。我们指定要使用的 GTK 版本(在本例中为
3.0
)。 MyApp
类继承自Gtk.Window
,它代表应用程序的主窗口。- 我们使用
Gtk.Button
创建一个按钮,并将按钮的标签设置为“Click Me”。我们还将按钮的“clicked”信号连接到on_button_clicked
方法,该方法在单击时打印“Hello, World!”。 - 应用程序的主循环是通过调用 Gtk.main() 启动的。此循环等待事件(如点击)并相应地更新应用程序。
要运行该应用程序,请导航到保存 app.py
文件的目录并运行以下命令:
python3 app.py
将出现一个窗口,其中带有一个标有“Click Me”的按钮。当您单击该按钮时,终端中将打印“Hello, World!”。
向您的 PyGObject 应用程序添加更多功能
现在让我们通过添加更多小部件和交互性来扩展我们的应用程序。
1. 添加标签
我们可以通过添加 Gtk.Label 在窗口中显示消息而不是在终端中打印消息来增强我们的应用程序。
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
class MyApp(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Enhanced GUI App")
self.set_size_request(400, 200)
# Create a vertical box layout
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
self.add(vbox)
# Create a label
self.label = Gtk.Label(label="Press the button to see a message")
vbox.pack_start(self.label, True, True, 0)
# Create a button
button = Gtk.Button(label="Click Me")
button.connect("clicked", self.on_button_clicked)
vbox.pack_start(button, True, True, 0)
def on_button_clicked(self, widget):
self.label.set_text("Hello, World!")
Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)
app.show_all()
Gtk.main()
变更说明:
- 我们使用
Gtk.Box
来垂直组织小部件,这有助于我们将标签和按钮依次排列。 - 添加
Gtk.Label
小部件以在窗口内显示消息。 on_button_clicked
函数现在更新标签的文本,而不是打印到终端。
2. 添加用户输入的输入字段
接下来,让我们添加 Gtk.Entry 小部件以允许用户输入,这将使我们能够创建一个简单的应用程序,用户可以在其中输入自己的姓名并单击按钮来显示个性化问候语。
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
class MyApp(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="User Input App")
self.set_size_request(400, 200)
# Create a vertical box layout
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
self.add(vbox)
# Create an Entry widget for user input
self.entry = Gtk.Entry()
self.entry.set_placeholder_text("Enter your name")
vbox.pack_start(self.entry, True, True, 0)
# Create a button
button = Gtk.Button(label="Submit")
button.connect("clicked", self.on_button_clicked)
vbox.pack_start(button, True, True, 0)
# Create a label to display the greeting
self.label = Gtk.Label(label="")
vbox.pack_start(self.label, True, True, 0)
def on_button_clicked(self, widget):
name = self.entry.get_text()
if name:
self.label.set_text(f"Hello, {name}!")
else:
self.label.set_text("Please enter your name.")
Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)
app.show_all()
Gtk.main()
代码解释:
Gtk.Entry
是一个输入字段,用户可以在其中输入自己的姓名。set_placeholder_text
方法在输入框中显示提示,直到用户键入内容。- 单击该按钮后,将使用
get_text()
检索输入的姓名,并将其作为个性化问候语显示在标签中。
3. 使用 CSS 设计您的应用程序
PyGObject 允许您使用名为 style.css
的 CSS 文件将自定义样式应用到应用程序小部件。
window {
background-color: #f0f0f0;
}
button {
background-color: #4CAF50;
color: white;
border-radius: 5px;
padding: 10px;
}
label {
font-size: 16px;
color: #333;
}
现在,修改 Python 代码以加载并应用此 CSS 文件:
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk
class MyApp(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Styled GUI App")
self.set_size_request(400, 200)
# Load CSS
css_provider = Gtk.CssProvider()
css_provider.load_from_path("style.css")
screen = Gdk.Screen.get_default()
style_context = Gtk.StyleContext()
style_context.add_provider_for_screen(screen, css_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER)
# Create a vertical box layout
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
self.add(vbox)
# Create an Entry widget for user input
self.entry = Gtk.Entry()
self.entry.set_placeholder_text("Enter your name")
vbox.pack_start(self.entry, True, True, 0)
# Create a button
button = Gtk.Button(label="Submit")
button.connect("clicked", self.on_button_clicked)
vbox.pack_start(button, True, True, 0)
# Create a label to display the greeting
self.label = Gtk.Label(label="")
vbox.pack_start(self.label, True, True, 0)
def on_button_clicked(self, widget):
name = self.entry.get_text()
if name:
self.label.set_text(f"Hello, {name}!")
else:
self.label.set_text("Please enter your name.")
Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)
app.show_all()
Gtk.main()
CSS 变更说明:
- 该按钮具有绿色背景,标签具有自定义字体大小和颜色。
- 按钮的边框呈圆形,具有现代外观。
结论
PyGObject 是一个使用 Python 在 Linux 桌面上创建 GUI 应用程序的强大工具。通过利用 Python 的灵活性和简单性以及 GTK 的丰富功能,开发人员可以创建功能丰富且具有视觉吸引力的应用程序。
在本指南中,我们介绍了设置 PyGObject、创建简单窗口、处理按钮单击、添加用户输入,甚至应用自定义 CSS 样式的基础知识。
您可以扩展这些示例来构建更复杂的应用程序,例如文件管理器、媒体播放器,甚至专业级软件。使用PyGObject和GTK,创建桌面应用程序的可能性几乎是无限的!