Ubuntu下Python图形界面开发指南
在Ubuntu系统中,Python图形界面(GUI)开发可通过多种成熟库实现,覆盖从初学者到进阶开发者的不同需求。以下是主流库的安装、基础使用及特色说明,帮助你快速启动项目。
Tkinter是Python内置的GUI库,无需额外安装(Ubuntu默认包含),适合快速构建简单桌面应用。
sudo apt update && sudo apt install python3-tk
import tkinter as tk
from tkinter import messagebox
def update_label():
label.config(text=f"你输入了:{entry.get()}")
root = tk.Tk()
root.title("Tkinter入门示例")
root.geometry("300x200")
label = tk.Label(root, text="欢迎使用Tkinter!", font=("Arial", 12))
label.pack(pady=10)
entry = tk.Entry(root, width=25)
entry.pack(pady=5)
button = tk.Button(root, text="提交", command=update_label)
button.pack(pady=10)
root.mainloop()
PyQt5是Qt框架的Python绑定,提供丰富的控件和可视化工具,适合开发复杂桌面应用(如企业级软件)。
pip3 install pyqt5 pyqt5-tools
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QWidget
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("PyQt5示例")
self.setGeometry(100, 100, 300, 200)
# 布局与控件
layout = QVBoxLayout()
label = QLabel("Hello, PyQt5!")
button = QPushButton("点击我")
button.clicked.connect(lambda: label.setText("按钮被点击了!"))
layout.addWidget(label)
layout.addWidget(button)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
designer命令)拖拽设计界面,保存为.ui文件后,通过pyuic5转换为Python代码,提升开发效率。customtkinter是基于Tkinter的第三方库,提供现代化UI设计(圆角、渐变、主题切换),适合需要更好视觉效果的应用。
pip3 install customtkinter
import customtkinter as ctk
def login():
print("登录成功!")
ctk.set_appearance_mode("dark") # 主题:light/dark/system
ctk.set_default_color_theme("blue") # 主题颜色
root = ctk.CTk()
root.geometry("400x300")
root.title("登录系统")
frame = ctk.CTkFrame(root, fg_color=("gray10", "gray20"))
frame.pack(pady=40, padx=40, fill="both", expand=True)
label = ctk.CTkLabel(frame, text="用户登录", font=("Arial", 20, "bold"))
label.pack(pady=20)
entry_username = ctk.CTkEntry(frame, placeholder_text="用户名", width=200)
entry_username.pack(pady=10)
entry_password = ctk.CTkEntry(frame, placeholder_text="密码", show="*", width=200)
entry_password.pack(pady=10)
button = ctk.CTkButton(frame, text="登录", command=login, width=150)
button.pack(pady=20)
root.mainloop()
Kivy是基于OpenGL的跨平台框架,支持触摸屏操作,适合开发需要跨设备(手机、平板、桌面)运行的应用(如游戏、教育工具)。
pip3 install kivy
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
class MyApp(App):
def build(self):
layout = BoxLayout(orientation='vertical', padding=50, spacing=20)
button = Button(text="点击我", size_hint=(None, None), size=(200, 100))
button.bind(on_press=lambda x: print("按钮被点击了!"))
layout.add_widget(button)
return layout
if __name__ == "__main__":
MyApp().run()
wxPython是wxWidgets C++库的Python封装,提供原生外观的控件,适合需要符合操作系统风格的应用(如办公软件)。
pip3 install wxpython
import wx
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(None, title="wxPython示例", size=(300, 200))
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
label = wx.StaticText(panel, label="请输入文本:")
vbox.Add(label, flag=wx.ALIGN_CENTER|wx.TOP|wx.BOTTOM, border=10)
self.text_ctrl = wx.TextCtrl(panel, style=wx.TE_MULTILINE)
vbox.Add(self.text_ctrl, proportion=1, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.BOTTOM, border=10)
button = wx.Button(panel, label="提交")
button.Bind(wx.EVT_BUTTON, self.on_submit)
vbox.Add(button, flag=wx.ALIGN_CENTER|wx.TOP|wx.BOTTOM, border=10)
panel.SetSizer(vbox)
def on_submit(self, event):
print(f"输入的文本:{self.text_ctrl.GetValue()}")
app = wx.App(False)
frame = MyFrame()
frame.Show()
app.MainLoop()
File -> New Project创建GUI项目,直接拖拽设计界面。以上库各有优势,可根据项目需求选择:初学者优先尝试Tkinter或customtkinter,复杂应用选PyQt5,跨设备应用选Kivy,需要原生外观选wxPython。