一、簡(jiǎn)介
在Qt(和大多數(shù)用戶(hù)界面)中,“小部件”是用戶(hù)可以與之交互的UI組件的名稱(chēng)。用戶(hù)界面由布置在窗口內(nèi)的多個(gè)小部件組成。
Qt帶有大量可用的小部件,也允許您創(chuàng)建自己的自定義和自定義小部件。
二、小部件列表
Qt文檔中提供了所有小部件的完整列表,但讓我們快速了解一下它們的實(shí)際效果。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
# 僅用于訪(fǎng)問(wèn)命令行參數(shù)
import sys
# 子類(lèi)QMainWindow來(lái)定制你的應(yīng)用程序的主窗口
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setWindowTitle("高效碼農(nóng)")
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)
# 設(shè)置窗口的中心部件。小部件將在默認(rèn)情況下展開(kāi)以占據(jù)窗口中的所有空間。
self.setCentralWidget(widget)
# 每個(gè)應(yīng)用程序需要一個(gè)(且只有一個(gè))QApplication實(shí)例。
# 如果確定不會(huì)使用命令行參數(shù),QApplication([])也可以。
app = QApplication(sys.argv)
window = MainWindow()
window.show() # 重要!!!!! windows 默認(rèn)是隱藏的.
# 啟動(dòng).
app.exec_()
運(yùn)行效果:

三、QLabel
我們從最簡(jiǎn)單的小部件QLabl開(kāi)始。廢話(huà)不多說(shuō)上代碼~~~
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
# 僅用于訪(fǎng)問(wèn)命令行參數(shù)
import sys
# 子類(lèi)QMainWindow來(lái)定制你的應(yīng)用程序的主窗口
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setWindowTitle("高效碼農(nóng)")
widget = QLabel("Hello") #用字符串Hello創(chuàng)建 QLabel部件,也可以使用.setText()方法
# widget.setText("2")
font = widget.font()
font.setPointSize(300) # 設(shè)置QLabel字體大小
widget.setFont(font)
widget.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter) # 設(shè)置QLabel顯示位置
self.setCentralWidget(widget)
# 每個(gè)應(yīng)用程序需要一個(gè)(且只有一個(gè))QApplication實(shí)例。
# 如果確定不會(huì)使用命令行參數(shù),QApplication([])也可以。
app = QApplication(sys.argv)
window = MainWindow()
window.show() # 重要!!!!! Windows 默認(rèn)是隱藏的.
# 啟動(dòng).
app.exec_()
運(yùn)行效果:

請(qǐng)注意,您使用OR管道(|)組合了兩個(gè)標(biāo)志(不是A & B)。這是因?yàn)闃?biāo)志是不重疊的位掩碼。例如Qt.AlignLeft具有十六進(jìn)制值0x0001,Qt.AlignBottom而是0x0040。
通過(guò)“或”運(yùn)算,我們得到0x0041表示“左下” 的值。該原理適用于所有其他組合Qt標(biāo)志。
如果您覺(jué)得這很亂,只記得使用’|‘ 就行了
四、QCheckBox
QCheckBox是向用戶(hù)顯示一個(gè)可復(fù)選框。與所有Qt小部件一樣,有許多可配置的選項(xiàng)可以更改小部件的行為。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
# 僅用于訪(fǎng)問(wèn)命令行參數(shù)
import sys
# 子類(lèi)QMainWindow來(lái)定制你的應(yīng)用程序的主窗口
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setWindowTitle("高效碼農(nóng)")
widget = QCheckBox()
# 設(shè)置復(fù)選框狀態(tài) 分別為:Qt.Unchecked 未選中 Qt.PartiallyChecked 中間狀態(tài)(沒(méi)有被選中,也沒(méi)有不被選中) 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)
# 每個(gè)應(yīng)用程序需要一個(gè)(且只有一個(gè))QApplication實(shí)例。
# 如果確定不會(huì)使用命令行參數(shù),QApplication([])也可以。
app = QApplication(sys.argv)
window = MainWindow()
window.show() # 重要!!!!! Windows 默認(rèn)是隱藏的.
# 啟動(dòng).
app.exec_()
五、QComboBox
QComboBox是一個(gè)下拉列表,默認(rèn)情況下關(guān)閉,用箭頭打開(kāi)。您可以從列表中選擇一個(gè)項(xiàng)目,當(dāng)前選中的項(xiàng)目將顯示為小部件上的標(biāo)簽。組合框適合于從一長(zhǎng)列選項(xiàng)中選擇一個(gè)選項(xiàng)。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
# 僅用于訪(fǎng)問(wèn)命令行參數(shù)
import sys
# 子類(lèi)QMainWindow來(lái)定制你的應(yīng)用程序的主窗口
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setWindowTitle("高效碼農(nóng)")
widget = QComboBox()
widget.addItems(["One", "Two", "Three"])
# 默認(rèn)傳遞索引
widget.currentIndexChanged.connect( self.index_changed )
# 同樣的信號(hào)也可以發(fā)送文本
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)
# 每個(gè)應(yīng)用程序需要一個(gè)(且只有一個(gè))QApplication實(shí)例。
# 如果確定不會(huì)使用命令行參數(shù),QApplication([])也可以。
app = QApplication(sys.argv)
window = MainWindow()
window.show() # 重要!!!!! Windows 默認(rèn)是隱藏的.
# 啟動(dòng).
app.exec_()
六、QLineEdit
QLineEdit小部件是一個(gè)簡(jiǎn)單的單行文本編輯框,用戶(hù)可以在其中輸入信息。例如,在輸入電子郵件地址或計(jì)算機(jī)名稱(chēng)時(shí)。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
# 僅用于訪(fǎng)問(wèn)命令行參數(shù)
import sys
# 子類(lèi)QMainWindow來(lái)定制你的應(yīng)用程序的主窗口
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setWindowTitle("高效碼農(nóng)")
widget = QLineEdit()
widget.setMaxLength(10)
widget.setPlaceholderText("Enter your text")
#widget.setReadOnly(True) # 設(shè)置只讀
widget.returnPressed.connect(self.return_pressed) # 回車(chē)事件
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)
# 每個(gè)應(yīng)用程序需要一個(gè)(且只有一個(gè))QApplication實(shí)例。
# 如果確定不會(huì)使用命令行參數(shù),QApplication([])也可以。
app = QApplication(sys.argv)
window = MainWindow()
window.show() # 重要!!!!! Windows 默認(rèn)是隱藏的.
# 啟動(dòng).
app.exec_()