目錄
?專欄導讀?
1 PyQt6 簡介:
1.1 安裝 PyQt6 和相關工具:
1.2 PyQt6 基礎知識:
1.2.1 Qt 的基本概念和組件:
1.2.2 創建和使用 Qt 窗口、標簽、按鈕等基本組件
1.2.3 布局管理器:垂直布局、水平布局、網格布局等:
2 事件處理和信號槽
2.1 事件和信號的概念
2.2 處理用戶輸入:鼠標點擊、鍵盤按鍵等
2.3 信號槽機制:連接信號和槽函數
3 Qt 界面設計
3.1 使用 Qt Designer 創建界面
3.2 設置界面樣式和主題:
3.3 自定義樣式表
?專欄導讀?
專欄訂閱地址:https://blog.csdn.net/qq_35831906/category_12375510.html
1 PyQt6 簡介:
????????PyQt6 是一個 Python 庫,提供了對 Qt 6 C++ 庫的 Python 綁定,使開發者能夠使用 Python 來創建豐富的圖形用戶界面應用程序。Qt 6 是一個廣泛使用的跨平臺應用程序框架,它提供了豐富的工具和組件,用于構建桌面、移動和嵌入式應用程序。PyQt6 允許開發者充分利用 Qt 6 的功能,同時使用 Python 進行開發。
1.1 安裝 PyQt6 和相關工具:
要安裝 PyQt6,可以使用以下命令:
pip install PyQt6
1.2 PyQt6 基礎知識:
1.2.1 Qt 的基本概念和組件:
- QWidget:是所有 Qt 窗口部件的基類,它提供了基本的窗口功能。
- QLabel:用于顯示文本或圖像。
- QPushButton:用于創建按鈕。
- QLineEdit:用于接收單行文本輸入。
- QTextEdit:用于接收多行文本輸入。
1.2.2 創建和使用 Qt 窗口、標簽、按鈕等基本組件
以下示例展示了如何創建一個簡單的 PyQt6 窗口,并在窗口中添加一個標簽和按鈕:
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel, QPushButtonclass MyWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("PyQt6 Example")self.setGeometry(100, 100, 400, 300)label = QLabel("Hello, PyQt6!", self)label.move(150, 150)button = QPushButton("Click Me", self)button.setGeometry(150, 200, 100, 30)button.clicked.connect(self.on_button_click)def on_button_click(self):print("Button Clicked!")if __name__ == "__main__":app = QApplication(sys.argv)window = MyWindow()window.show()sys.exit(app.exec())
1.2.3 布局管理器:垂直布局、水平布局、網格布局等:
布局管理器用于組織和排列界面上的組件。以下是一個使用垂直布局和水平布局的示例:
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QPushButton, QLabel, QWidgetclass MyWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Layout Example")self.setGeometry(100, 100, 400, 300)main_widget = QWidget(self)self.setCentralWidget(main_widget)layout = QVBoxLayout()label = QLabel("Hello, PyQt6!", self)layout.addWidget(label)button = QPushButton("Click Me", self)layout.addWidget(button)main_widget.setLayout(layout)if __name__ == "__main__":app = QApplication(sys.argv)window = MyWindow()window.show()sys.exit(app.exec())
2 事件處理和信號槽
2.1 事件和信號的概念
????????在 PyQt6 中,事件是與用戶交互或系統操作相關的動作。信號是對象發出的事件通知,而槽是響應信號的函數。
2.2 處理用戶輸入:鼠標點擊、鍵盤按鍵等
????????你可以通過重寫 QWidget 的事件處理方法來處理不同的用戶輸入事件。例如,處理鼠標點擊事件:
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel
from PyQt6.QtCore import Qtclass MyWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Event Handling Example")self.setGeometry(100, 100, 400, 300)self.label = QLabel("Click anywhere in the window", self)self.label.setAlignment(Qt.AlignmentFlag.AlignCenter)self.label.setGeometry(0, 100, 400, 50)def mousePressEvent(self, event):if event.button() == Qt.MouseButton.LeftButton:self.label.setText("Left mouse button clicked")elif event.button() == Qt.MouseButton.RightButton:self.label.setText("Right mouse button clicked")if __name__ == "__main__":app = QApplication(sys.argv)window = MyWindow()window.show()sys.exit(app.exec())
2.3 信號槽機制:連接信號和槽函數
使用信號槽機制,你可以在對象之間建立通信。以下是一個按鈕點擊信號與槽函數連接的示例:
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QLineEdit, QCheckBoxclass MyWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Signal Slot Example")self.setGeometry(100, 100, 400, 300)# 創建一個標簽,用于顯示按鈕點擊次數self.label = QLabel("Click the button", self)self.label.setGeometry(150, 30, 150, 30)# 創建一個按鈕,并連接點擊事件到槽函數button = QPushButton("Click Me", self)button.setGeometry(150, 70, 100, 30)button.clicked.connect(self.on_button_click)self.counter = 0 # 記錄按鈕點擊次數的計數器# 創建一個復選框,用于啟用/禁用輸入框self.checkbox = QCheckBox("Enable Input", self)self.checkbox.setGeometry(100, 120, 200, 30)self.checkbox.toggled.connect(self.on_checkbox_toggled)# 創建一個文本標簽和輸入框self.input_label = QLabel("Enter text:", self)self.input_label.setGeometry(80, 160, 100, 30)self.input_text = QLineEdit(self)self.input_text.setGeometry(180, 160, 150, 30)self.input_text.setEnabled(False) # 初始狀態下禁用輸入框self.input_text.textChanged.connect(self.on_text_changed)def on_button_click(self):self.counter += 1self.label.setText(f"Button Clicked {self.counter} times!")def on_checkbox_toggled(self, checked):# 當復選框狀態改變時,啟用/禁用輸入框self.input_text.setEnabled(checked)if not checked:self.input_text.clear()def on_text_changed(self, text):# 當輸入框文本改變時,更新標簽顯示的文本self.label.setText(f"Input Text: {text}")if __name__ == "__main__":app = QApplication(sys.argv)window = MyWindow()window.show()sys.exit(app.exec())
3 Qt 界面設計
3.1 使用 Qt Designer 創建界面
????????Qt Designer 是一個可視化的界面設計工具,它可以幫助你直觀地創建界面,然后將設計好的界面與 PyQt 代碼結合。以下是一個簡單的步驟來使用 Qt Designer:
使用Qt Designer創建界面:
- 打開 Qt Designer 工具。
- 設計界面:拖拽組件、設置屬性、布局等。
- 保存設計為
.ui
文件。- 使用
pyuic
工具將.ui
文件轉換為 Python 代碼。
如果你的 .ui
文件名為 my_ui.ui
,你可以使用以下命令將其轉換為 Python 代碼:
pyuic6 my_ui.ui -o my_ui.py
3.2 設置界面樣式和主題:
????????你可以使用 Qt 的樣式表來自定義界面的外觀和風格。樣式表使用 CSS 類似的語法。以下是一個簡單的示例:
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButtonapp = QApplication([])# 創建窗口和按鈕
window = QMainWindow()
button = QPushButton("Styled Button")
window.setCentralWidget(button)# 設置樣式表
style = """QPushButton {background-color: #4CAF50;color: white;padding: 10px 20px;border: none;}
"""
button.setStyleSheet(style)window.show()
app.exec()
?示例2:
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QLabel, QWidget
from PyQt6.QtGui import QPalette, QColor
from PyQt6.QtCore import Qtclass MyWindow(QMainWindow):def __init__(self):super().__init__()# 設置窗口標題和尺寸self.setWindowTitle("Styled Button Example")self.setGeometry(100, 100, 400, 300)# 創建中央部件self.central_widget = QWidget(self)self.setCentralWidget(self.central_widget)# 設置背景顏色palette = QPalette()palette.setColor(QPalette.ColorRole.Window, QColor(240, 240, 240))self.central_widget.setPalette(palette)# 創建垂直布局管理器layout = QVBoxLayout()self.central_widget.setLayout(layout)# 創建一個標簽,顯示按鈕點擊狀態self.label = QLabel("Button not clicked", self)layout.addWidget(self.label, alignment=Qt.AlignmentFlag.AlignCenter)# 設置按鈕樣式表style = """QPushButton {background-color: #3498db;color: white;padding: 10px 20px;border: none;border-radius: 5px;}QPushButton:hover {background-color: #2980b9;}"""self.button = QPushButton("Styled Button", self)self.button.setStyleSheet(style)layout.addWidget(self.button, alignment=Qt.AlignmentFlag.AlignCenter)self.button.clicked.connect(self.on_button_click)# 創建切換主題按鈕self.theme_button = QPushButton("Change Theme", self)layout.addWidget(self.theme_button, alignment=Qt.AlignmentFlag.AlignCenter)self.theme_button.clicked.connect(self.change_theme)def on_button_click(self):# 當按鈕被點擊時,更新標簽文本self.label.setText("Button clicked!")def change_theme(self):# 切換主題樣式表new_style = """QPushButton {background-color: #e74c3c;color: white;padding: 10px 20px;border: none;border-radius: 5px;}QPushButton:hover {background-color: #c0392b;}"""self.button.setStyleSheet(new_style)if __name__ == "__main__":# 創建應用程序實例并顯示窗口app = QApplication(sys.argv)window = MyWindow()window.show()sys.exit(app.exec())
?3.3 自定義樣式表
????????自定義樣式表是一種在Qt應用程序中使用CSS(層疊樣式表)語法來修改界面組件外觀的方式。通過自定義樣式表,你可以更改組件的背景、顏色、字體、邊框等,從而實現界面的個性化和美化。下面詳細解釋如何使用自定義樣式表,以及提供一個示例:
使用自定義樣式表:
基本語法: 自定義樣式表使用CSS語法來描述組件的外觀。通過設置屬性和值的方式,你可以定義按鈕、標簽、文本框等各種組件的外觀。
選擇器: 選擇器用于指定要應用樣式的組件。例如,使用
QPushButton
選擇器來指定樣式適用于按鈕組件。屬性和值: 在選擇器中,你可以設置多個屬性和值,例如
background-color
、color
、padding
等。每個屬性用冒號:
分隔,每個樣式聲明用分號;
分隔。偽狀態選擇器: 你還可以使用偽狀態選擇器,例如
:hover
來定義鼠標懸停時的樣式。
?下面是一個示例,展示如何使用自定義樣式表來美化按鈕組件:
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QLabel, QWidget
from PyQt6.QtGui import QPalette, QColor
from PyQt6.QtCore import Qtapp = QApplication(sys.argv)class MyWindow(QMainWindow):def __init__(self):super().__init__()# 設置窗口標題和尺寸self.setWindowTitle("Styled Interface Example")self.setGeometry(100, 100, 400, 300)# 創建中央部件self.central_widget = QWidget(self)self.setCentralWidget(self.central_widget)# 創建垂直布局管理器layout = QVBoxLayout()self.central_widget.setLayout(layout)# 創建一個標簽,顯示歡迎信息self.label = QLabel("Welcome to Styled Interface!", self)layout.addWidget(self.label, alignment=Qt.AlignmentFlag.AlignCenter)# 創建三個樣式化的按鈕并添加到布局self.button1 = QPushButton("Styled Button 1", self)layout.addWidget(self.button1)self.button1.setStyleSheet("background-color: #3498db; color: white; padding: 10px 20px; border: none; border-radius: 5px;")self.button2 = QPushButton("Styled Button 2", self)layout.addWidget(self.button2)self.button2.setStyleSheet("background-color: #e74c3c; color: white; padding: 10px 20px; border: none; border-radius: 5px;")self.button3 = QPushButton("Styled Button 3", self)layout.addWidget(self.button3)self.button3.setStyleSheet("background-color: #27ae60; color: white; padding: 10px 20px; border: none; border-radius: 5px;")# 創建切換主題按鈕并連接槽函數self.theme_button = QPushButton("Change Theme", self)layout.addWidget(self.theme_button)self.theme_button.clicked.connect(self.change_theme)def change_theme(self):# 切換按鈕的主題樣式表new_style = """QPushButton {background-color: #9b59b6;color: white;padding: 10px 20px;border: none;border-radius: 5px;}QPushButton:hover {background-color: #8e44ad;}"""self.button1.setStyleSheet(new_style)self.button2.setStyleSheet(new_style)self.button3.setStyleSheet(new_style)if __name__ == "__main__":# 創建應用程序實例并顯示窗口window = MyWindow()window.show()sys.exit(app.exec())
?