Python PySide6替代PyQt5的例子

我逐行分析這段代碼:

 
python
import sys from PySide6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QPushButton)

這部分是導入必要的庫:

  • sys:提供系統相關功能,這裡主要用於應用程序的啟動和退出
  • PySide6.QtWidgets:導入Qt的各種UI控件
    • QApplication:相當於C#中的Application類,管理GUI應用程序的控制流和主設置
    • QMainWindow:主窗口類,類似C#中的Form
    • QWidget:所有UI元素的基類
    • QVBoxLayout/QHBoxLayout:垂直和水平布局管理器,類似C#中的StackPanel
    • QLabel:標籤控件,類似C#的Label
    • QLineEdit:單行文本輸入框,類似C#的TextBox
    • QPushButton:按鈕控件,類似C#的Button
 
python
class SimpleForm(QMainWindow): def __init__(self): super().__init__()

這裡定義了一個類SimpleForm,繼承自QMainWindow(主窗口類):

  • 在Python中,類的繼承寫在括號內
  • __init__是Python的構造函數,類似C#的constructor
  • super().__init__()調用父類的構造函數,類似C#中的base()
 
python
self.setWindowTitle("跨平台表單示例") self.setGeometry(100, 100, 400, 200)

設置窗口屬性:

  • setWindowTitle設置窗口標題,類似C#的this.Text = "..."
  • setGeometry設置窗口位置和大小(x, y, width, height),類似C#的this.Location和this.Size
 
python
# 中央部件 central_widget = QWidget() self.setCentralWidget(central_widget)
  • 在Qt中,QMainWindow需要一個中央部件來容納其他控件
  • 這相當於創建一個容器來放置所有UI元素
  • 類似C#中將控件添加到Form上,但Qt的架構要求明確設置一個中央部件
 
python
# 主布局 main_layout = QVBoxLayout(central_widget)

創建垂直布局並應用到中央部件上:

  • 垂直布局會將控件從上到下排列
  • 這類似於C#中的StackPanel設置為Vertical方向
 
python
# 名稱輸入行 name_layout = QHBoxLayout() name_label = QLabel("姓名:") self.name_input = QLineEdit() name_layout.addWidget(name_label) name_layout.addWidget(self.name_input) main_layout.addLayout(name_layout)

創建一個水平布局用於"姓名"輸入區域:

  • QHBoxLayout將控件從左到右排列
  • 創建一個標籤和一個輸入框
  • 將標籤和輸入框添加到水平布局中
  • 然後將整個水平布局添加到主垂直布局中
  • 這種嵌套布局在C#中類似於在一個StackPanel內部放置另一個方向不同的StackPanel
 
python
# 郵箱輸入行 email_layout = QHBoxLayout() email_label = QLabel("郵箱:") self.email_input = QLineEdit() email_layout.addWidget(email_label) email_layout.addWidget(self.email_input) main_layout.addLayout(email_layout)

同樣的模式用於創建"郵箱"輸入區域,與上面的代碼結構相同

 
python
# 提交按鈕 self.submit_btn = QPushButton("提交") self.submit_btn.clicked.connect(self.on_submit) main_layout.addWidget(self.submit_btn)

創建提交按鈕並設置事件處理:

  • 創建一個按鈕控件
  • clicked.connect(self.on_submit)設置點擊事件處理程序,類似C#中的button.Click += OnSubmit
  • 將按鈕添加到主布局中
 
python
def on_submit(self): name = self.name_input.text() email = self.email_input.text() print(f"提交數據: 姓名={name}, 郵箱={email}")

定義按鈕點擊事件的處理函數:

  • 獲取輸入框的文本,類似C#中的textBox.Text
  • 使用f-string格式化字符串(Python 3.6+的特性),類似C#的字符串插值$"..."
  • 將數據打印到控制台
 
python
if __name__ == "__main__": app = QApplication(sys.argv) window = SimpleForm() window.show() sys.exit(app.exec())

應用程序的入口點:

  • if __name__ == "__main__"是Python的慣用法,確保代碼只在直接運行此文件時執行,而不是在被導入時
  • 創建QApplication實例,這是每個GUI應用程序必須的
  • 創建主窗口實例
  • 顯示窗口
  • 啟動應用程序的事件循環並等待結束,類似C#中的Application.Run()
  • sys.exit()確保應用程序正確結束並返回適當的退出碼

Python與C#的主要區別

  1. 語法差異:
    • Python使用縮進而不是花括號來定義代碼塊
    • Python不需要分號結尾
    • Python變量不需要聲明類型
  2. 事件處理:
    • C#使用delegate和event,Python使用信號和槽(signals and slots)
  3. 內存管理:
    • 兩者都有垃圾回收,但Python的更為透明,不需要using語句或IDisposable
  4. 布局系統:
    • Qt使用布局管理器系統,而不是C#中的絕對位置或dock-based布局

這個例子展示了一個基本的表單應用程序,從C#轉到Python+PySide6應該不會太困難,因為許多概念是相通的,只是語法和一些特定模式有所不同。

← 回列表