一、簡介
在Qt(和大多數用戶界面)中,“小部件”是用戶可以與之交互的UI組件的名稱。用戶界面由布置在窗口內的多個小部件組成。
Qt帶有大量可用的小部件,也允許您創建自己的自定義和自定義小部件。
二、小部件列表
Qt文檔中提供了所有小部件的完整列表,但讓我們快速了解一下它們的實際效果。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
# 僅用于訪問命令行參數
import sys
# 子類QMainWindow來定制你的應用程序的主窗口
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setWindowTitle("高效碼農")
layout = QVBoxLayout()
widgets = [QCheckBox,
QComboBox,
QDateEdit,
QDateTimeEdit,
QDial,
QDoubleSpinBox,
QFontComboBox,
QLCDNumber,
QLabel,
QLineEdit,
QProgressBar,
QPushButton,
QRadioButton,
QSlider,
QSpinBox,
QTimeEdit]
for w in widgets:
layout.addWidget(w())
widget = QWidget()
widget.setLayout(layout)
# 設置窗口的中心部件。小部件將在默認情況下展開以占據窗口中的所有空間。
self.setCentralWidget(widget)
# 每個應用程序需要一個(且只有一個)QApplication實例。
# 如果確定不會使用命令行參數,QApplication([])也可以。
app = QApplication(sys.argv)
window = MainWindow()
window.show() # 重要!!!!! windows 默認是隱藏的.
# 啟動.
app.exec_()
運行效果:
三、QLabel
我們從最簡單的小部件QLabl開始。廢話不多說上代碼~~~
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
# 僅用于訪問命令行參數
import sys
# 子類QMainWindow來定制你的應用程序的主窗口
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setWindowTitle("高效碼農")
widget = QLabel("Hello") #用字符串Hello創建 QLabel部件,也可以使用.setText()方法
# widget.setText("2")
font = widget.font()
font.setPointSize(300) # 設置QLabel字體大小
widget.setFont(font)
widget.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter) # 設置QLabel顯示位置
self.setCentralWidget(widget)
# 每個應用程序需要一個(且只有一個)QApplication實例。
# 如果確定不會使用命令行參數,QApplication([])也可以。
app = QApplication(sys.argv)
window = MainWindow()
window.show() # 重要!!!!! Windows 默認是隱藏的.
# 啟動.
app.exec_()
運行效果:
請注意,您使用OR管道(|)組合了兩個標志(不是A & B)。這是因為標志是不重疊的位掩碼。例如Qt.AlignLeft具有十六進制值0x0001,Qt.AlignBottom而是0x0040。
通過“或”運算,我們得到0x0041表示“左下” 的值。該原理適用于所有其他組合Qt標志。
如果您覺得這很亂,只記得使用’|‘ 就行了
四、QCheckBox
QCheckBox是向用戶顯示一個可復選框。與所有Qt小部件一樣,有許多可配置的選項可以更改小部件的行為。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
# 僅用于訪問命令行參數
import sys
# 子類QMainWindow來定制你的應用程序的主窗口
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setWindowTitle("高效碼農")
widget = QCheckBox()
# 設置復選框狀態 分別為:Qt.Unchecked 未選中 Qt.PartiallyChecked 中間狀態(沒有被選中,也沒有不被選中) Qt.Checked 已選中
widget.setCheckState(Qt.PartiallyChecked)
widget.stateChanged.connect(self.show_state)
self.setCentralWidget(widget)
def show_state(self, s):
print(s == Qt.Checked)
print(s)
# 每個應用程序需要一個(且只有一個)QApplication實例。
# 如果確定不會使用命令行參數,QApplication([])也可以。
app = QApplication(sys.argv)
window = MainWindow()
window.show() # 重要!!!!! Windows 默認是隱藏的.
# 啟動.
app.exec_()
五、QComboBox
QComboBox是一個下拉列表,默認情況下關閉,用箭頭打開。您可以從列表中選擇一個項目,當前選中的項目將顯示為小部件上的標簽。組合框適合于從一長列選項中選擇一個選項。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
# 僅用于訪問命令行參數
import sys
# 子類QMainWindow來定制你的應用程序的主窗口
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setWindowTitle("高效碼農")
widget = QComboBox()
widget.addItems(["One", "Two", "Three"])
# 默認傳遞索引
widget.currentIndexChanged.connect( self.index_changed )
# 同樣的信號也可以發送文本
widget.currentIndexChanged[str].connect( self.text_changed )
self.setCentralWidget(widget)
def index_changed(self, i): # i is an int
print(i)
def text_changed(self, s): # s is a str
print(s)
# 每個應用程序需要一個(且只有一個)QApplication實例。
# 如果確定不會使用命令行參數,QApplication([])也可以。
app = QApplication(sys.argv)
window = MainWindow()
window.show() # 重要!!!!! Windows 默認是隱藏的.
# 啟動.
app.exec_()
六、QLineEdit
QLineEdit小部件是一個簡單的單行文本編輯框,用戶可以在其中輸入信息。例如,在輸入電子郵件地址或計算機名稱時。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
# 僅用于訪問命令行參數
import sys
# 子類QMainWindow來定制你的應用程序的主窗口
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setWindowTitle("高效碼農")
widget = QLineEdit()
widget.setMaxLength(10)
widget.setPlaceholderText("Enter your text")
#widget.setReadOnly(True) # 設置只讀
widget.returnPressed.connect(self.return_pressed) # 回車事件
widget.selectionChanged.connect(self.selection_changed)
widget.textChanged.connect(self.text_changed) # 文本改變事件
widget.textEdited.connect(self.text_edited) # 文本編輯事件
self.setCentralWidget(widget)
def return_pressed(self):
print("Return pressed!")
self.centralWidget().setText("BOOM!")
def selection_changed(self):
print("Selection changed")
print(self.centralWidget().selectedText())
def text_changed(self, s):
print("Text changed...")
print(s)
def text_edited(self, s):
print("Text edited...")
print(s)
# 每個應用程序需要一個(且只有一個)QApplication實例。
# 如果確定不會使用命令行參數,QApplication([])也可以。
app = QApplication(sys.argv)
window = MainWindow()
window.show() # 重要!!!!! Windows 默認是隱藏的.
# 啟動.
app.exec_()