Ubuntu下開發Python圖形界面(GUI)的常用庫及實踐指南
在Ubuntu上開發Python GUI應用前,需確保系統已安裝Python 3及pip(Python包管理工具)。若未安裝,可通過以下命令完成基礎配置:
sudo apt update
sudo apt install python3 python3-pip
建議使用虛擬環境隔離項目依賴(可選但推薦):
sudo apt install python3-venv
python3 -m venv my_gui_env # 創建虛擬環境
source my_gui_env/bin/activate # 激活環境
Tkinter是Python的內置GUI庫,無需額外安裝(Ubuntu默認包含),適合新手學習或開發簡單工具。
sudo apt install python3-tk
import tkinter as tk
from tkinter import messagebox
def show_message():
user_input = entry.get()
messagebox.showinfo("Greeting", f"Hello, {user_input}!")
root = tk.Tk()
root.title("Tkinter Demo")
root.geometry("300x200")
label = tk.Label(root, text="Enter your name:")
label.pack(pady=10)
entry = tk.Entry(root, width=20)
entry.pack(pady=5)
button = tk.Button(root, text="Submit", command=show_message)
button.pack(pady=10)
root.mainloop()
PyQt5是Qt框架的Python綁定,提供豐富的UI組件(如表格、樹形視圖)和高級功能(如拖拽設計、信號槽機制),適合開發專業級桌面應用。
pip install pyqt5
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QVBoxLayout
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle("PyQt5 Demo")
self.setGeometry(100, 100, 300, 200)
layout = QVBoxLayout()
label = QLabel("Welcome to PyQt5!")
layout.addWidget(label)
button = QPushButton("Click Me")
button.clicked.connect(lambda: label.setText("Button Clicked!"))
layout.addWidget(button)
self.setLayout(layout)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
pyuic5
命令轉換為Python代碼,提升開發效率。Kivy是基于OpenGL的跨平臺框架,支持觸摸操作,適合開發移動端或需要觸控的桌面應用(如游戲、教育工具)。
sudo apt install python3-kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
class MyApp(App):
def build(self):
layout = BoxLayout(orientation='vertical', padding=10, spacing=10)
label = Label(text="Hello, Kivy!", font_size=24)
button = Button(text="Click Me", size_hint=(None, None), size=(100, 50))
button.bind(on_press=lambda x: setattr(label, 'text', "Button Pressed!"))
layout.add_widget(label)
layout.add_widget(button)
return layout
MyApp().run()
wxPython是wxWidgets C++庫的Python封裝,提供原生外觀的控件,適合開發符合操作系統風格的應用。
sudo apt install python3-wxgtk4.0
import wx
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(None, wx.ID_ANY, "wxPython Demo", size=(300, 200))
panel = wx.Panel(self)
label = wx.StaticText(panel, label="Hello, wxPython!", pos=(50, 50))
button = wx.Button(panel, label="Click Me", pos=(50, 100))
button.Bind(wx.EVT_BUTTON, lambda e: label.SetLabel("Button Clicked!"))
app = wx.App(False)
frame = MyFrame()
frame.Show()
app.MainLoop()
GTK+是Ubuntu桌面環境(GNOME)的默認工具包,PyGObject是其Python綁定,適合開發與Ubuntu桌面深度集成的應用。
sudo apt install python3-gi gir1.2-gtk-3.0
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class MyWindow(Gtk.Window):
def __init__(self):
super().__init__(title="GTK+ Demo")
self.set_default_size(200, 100)
label = Gtk.Label(label="Hello, GTK+!")
self.add(label)
win = MyWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()