在 Ubuntu 上开发 Python 桌面应用,常见问题通常不是语法本身,而是“该选哪个 GUI 框架”和“第一步怎么把环境跑起来”。这篇文章把 Ubuntu 下几条主流方案拆开来看:先讲各自适合什么项目,再给出安装方式、最小示例和选型判断点,读完基本可以据此决定自己应该从 Tkinter、PyQt/PySide、PyGObject 还是 Kivy 起步。
为什么先做框架选择
Python 在 Ubuntu 上做桌面应用并不缺方案,但不同框架面向的目标差异很大。有的适合快速做小工具,有的更适合复杂业务系统,还有的更强调 Linux 原生体验或跨平台触控能力。先确定需求,再决定框架,能减少后续重构成本。
如果你的目标只是做一个简单表单、批处理工具或小型实用程序,优先考虑学习门槛更低的方案;如果需要表格、树形视图、界面设计器和较完整的组件体系,就应直接看功能更强的框架。
Tkinter:最省事的标准库方案
Tkinter 是 Python 内置 GUI 库,不需要额外安装,适合新手快速做出可运行的桌面窗口程序。在 Ubuntu 上,它尤其适合轻量工具、内部小程序和教学示例。
一个最小可运行示例
import tkinter as tk
from tkinter import messagebox
class SimpleApp:
def __init__(self, master):
self.master = master
master.title("Tkinter入门示例")
# 标签组件
self.label = tk.Label(master, text="请输入你的名字:", font=("Arial", 12))
self.label.pack(pady=10)
# 输入框组件
self.entry = tk.Entry(master, width=30)
self.entry.pack(pady=5)
# 按钮组件(绑定点击事件)
self.greet_button = tk.Button(master, text="打招呼", command=self.greet)
self.greet_button.pack(pady=10)
def greet(self):
name = self.entry.get().strip()
if name:
messagebox.showinfo("欢迎", f"你好,{name}!")
else:
messagebox.showwarning("输入错误", "请输入名字!")
# 启动应用
root = tk.Tk()
app = SimpleApp(root)
root.mainloop()
Tkinter 适合什么场景
- 无需额外安装,开箱即用,适合第一次接触桌面开发的 Python 用户。
- 可以用
pack()快速完成基础布局,也可根据需要换成grid()或place()。 - 通过
command参数直接绑定事件处理函数,写法直观。 - 适合简单工具类应用,但做复杂界面时,控件能力和工程化支持会逐渐吃紧。
PyQt/PySide:复杂桌面应用的主力方案
如果项目需要更完整的控件体系、清晰的事件机制和更现代的界面开发方式,PyQt/PySide 通常是更稳妥的选择。Qt 在桌面开发领域成熟度较高,适合企业级应用、管理系统、编辑器或 CAD 类工具。
安装与基础环境
文中给出的推荐安装方式如下:
pip install PyQt6
如果你希望使用 Qt Designer 进行拖拽式界面设计,还需要安装对应工具:
sudo apt install qttools5-dev-tools
方式一:直接手写界面代码
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QMessageBox
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("PyQt6示例")
self.setGeometry(100, 100, 300, 200)
# 中央部件(承载布局)
central_widget = QWidget()
self.setCentralWidget(central_widget)
# 垂直布局
layout = QVBoxLayout()
# 按钮组件
self.button = QPushButton("点击触发消息")
self.button.clicked.connect(self.show_dialog) # 绑定信号槽
layout.addWidget(self.button)
central_widget.setLayout(layout)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
这类写法适合已经熟悉 Qt API 的开发者。界面结构、事件绑定和窗口行为都可以直接在 Python 代码里控制。
方式二:用 Qt Designer 设计界面
如果你不想从零手写控件布局,可以使用 Qt Designer 先拖拽出界面,再把 .ui 文件转换成 Python 代码:
- 安装 Qt Designer:
sudo apt install qttools5-dev-tools - 运行
designer,拖拽按钮、标签等控件,保存为mainwindow.ui - 执行转换命令:
pyuic6 mainwindow.ui -o ui_mainwindow.py - 在主程序中继承生成的
Ui_MainWindow类并补充业务逻辑
这种方式对中大型项目更友好,尤其适合界面先行、逻辑后接的开发流程。
PyQt/PySide 的核心优势
- 支持跨平台,可运行在 Windows、macOS、Linux。
- 控件丰富,适合表格、树形视图、复杂菜单和多窗口应用。
- 支持主题和样式定制,例如 Fusion、Windows 等风格。
- 信号槽机制比普通回调更清晰,事件流更容易维护。
PyGObject:更贴近 Ubuntu 原生体验
如果你的目标是开发更符合 Ubuntu / GNOME 桌面风格的应用,PyGObject 是值得优先考虑的路线。它是 GTK+ 的 Python 绑定,和 Linux 桌面环境集成度更高,适合做桌面工具、配置程序、原生编辑器之类的应用。
环境安装命令
sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0
基础示例
import gi
gi.require_version('Gtk', '3.0') # 指定GTK版本
from gi.repository import Gtk
class MyWindow(Gtk.Window):
def __init__(self):
super().__init__(title="GTK3示例")
self.set_default_size(400, 300)
# 按钮组件
button = Gtk.Button(label="点我试试")
button.connect("clicked", self.on_button_clicked) # 绑定点击事件
self.add(button)
def on_button_clicked(self, widget):
print("按钮被点击了!") # 控制台输出
# 启动应用
win = MyWindow()
win.connect("destroy", Gtk.main_quit) # 关闭窗口时退出主循环
win.show_all()
Gtk.main()
它的实际价值在哪里
- 更容易融入 Ubuntu 当前桌面主题和 GTK 生态。
- 支持 CSS 样式定制和硬件加速,界面表现更接近原生 Linux 应用。
- 性能基础较好,底层依托 C 语言实现的 GTK 库。
- 对 Linux 用户习惯友好,适合做日常桌面工具。
Kivy:一套代码覆盖桌面和移动端
Kivy 更偏向强交互、触控友好和跨平台分发。如果项目除了 Ubuntu 桌面,还希望运行到 Android、iOS 或其他桌面平台,Kivy 会比传统桌面 GUI 框架更有优势。
安装命令
pip install kivy
基础示例
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
class MyApp(App):
def build(self):
# 布局(垂直排列)
layout = BoxLayout(orientation='vertical', padding=10, spacing=10)
# 标签组件
self.label = Label(text="欢迎使用Kivy", font_size=20)
# 按钮组件
button = Button(text="点击我", size_hint=(None, None), size=(150, 50))
button.bind(on_press=self.on_button_click) # 绑定点击事件
layout.add_widget(self.label)
layout.add_widget(button)
return layout
def on_button_click(self, instance):
self.label.text = "按钮被点击了!" # 更新标签内容
if __name__ == '__main__':
MyApp().run()
Kivy 更适合哪些项目
- 一次编码,多端运行,覆盖 Windows、macOS、Linux、iOS、Android。
- 支持多点触控、滑动、缩放等交互。
- 适合游戏、教育工具和需要更高交互性的应用。
- 可使用 Kivy 语言
.kv文件分离界面与逻辑。
Ubuntu 下该怎么选
如果你要的是尽快写出一个能用的小工具,Tkinter 的起步成本最低;如果你在做复杂业务系统、希望有更丰富的控件和更成熟的界面工程化能力,优先看 PyQt/PySide;如果你明确要贴合 Ubuntu 原生桌面体验,PyGObject 更合适;如果项目还要兼顾移动端或触控交互,Kivy 的路线最清晰。

可以把选择逻辑概括为:
- 新手、简单工具:Tkinter
- 复杂应用、企业软件:PyQt/PySide
- Linux 原生桌面工具:PyGObject
- 跨平台触控应用:Kivy
先按项目目标选框架,再做环境配置和示例验证,通常会比“把所有框架都试一遍”更高效。













