PyQt5高级控件
一、进度条类控件
1.ProgressBar:进度条
ProgressBar最常用的信号是valueChanged,在进度条值发生改变时发射。
注意:如果最小值和最大值都设置为0,那么进度条会显示为一个不断循环滚动的繁忙进度,而不是步骤中显示的百分比。
模拟一个跑马灯效果
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(305,259)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
self.progressBar.setGeometry(QtCore.QRect(50, 10, 201, 31))
self.progressBar.setLayoutDirection(QtCore.Qt.LeftToRight)
self.progressBar.setProperty("value",-1)
self.progressBar.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
self.progressBar.setTextVisible(True)
self.progressBar.setOrientation(QtCore.Qt.Horizontal)
self.progressBar.setTextDirection(QtWidgets.QProgressBar.TopToBottom)
self.progressBar.setFormat("")
self.progressBar.setObjectName("progressBar")
self.progressBar_2 = QtWidgets.QProgressBar(self.centralwidget)
self.progressBar_2.setGeometry(QtCore.QRect(50, 180, 201, 31))
self.progressBar_2.setLayoutDirection(QtCore.Qt.RightToLeft)
self.progressBar_2.setProperty("value", -1)
self.progressBar_2.setAlignment(QtCore.Qt.AlignBottom | QtCore.Qt.AlignHCenter)
self.progressBar_2.setTextVisible(True)
self.progressBar_2.setOrientation(QtCore.Qt.Horizontal)
self.progressBar_2.setTextDirection(QtWidgets.QProgressBar.TopToBottom)
self.progressBar_2.setObjectName("progressBar_2")
self.progressBar_3 = QtWidgets.QProgressBar(self.centralwidget)
self.progressBar_3.setGeometry(QtCore.QRect(20, 10, 31, 201))
self.progressBar_3.setLayoutDirection(QtCore.Qt.LeftToRight)
self.progressBar_3.setProperty("value", -1)
self.progressBar_3.setAlignment(QtCore.Qt.AlignLeading| QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
self.progressBar_3.setTextVisible(True)
self.progressBar_3.setOrientation(QtCore.Qt.Vertical)
self.progressBar_3.setTextDirection(QtWidgets.QProgressBar.TopToBottom)
self.progressBar_3.setObjectName("progressBar_3")
self.progressBar_1 = QtWidgets.QProgressBar(self.centralwidget)
self.progressBar_1.setGeometry(QtCore.QRect(250, 10, 31, 201))
self.progressBar_1.setLayoutDirection(QtCore.Qt.LeftToRight)
self.progressBar_1.setProperty("value", -1)
self.progressBar_1.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
self.progressBar_1.setTextVisible(True)
self.progressBar_1.setOrientation(QtCore.Qt.Vertical)
self.progressBar_1.setTextDirection(QtWidgets.QProgressBar.TopToBottom)
self.progressBar_1.setObjectName("progressBar_1")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(90, 220, 101, 31))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.timer = QtCore.QBasicTimer() #创建计时器对象
self.pushButton.clicked.connect(self.running) #为按钮绑定单击信号
def running(self):
if self.timer.isActive(): #判断计时器是否开启
self.timer.stop() #停止计时器
self.pushButton.setText('开始') #设置按钮的文本
self.progressBar.setMaximum(100)
self.progressBar_1.setMaximum(100)
self.progressBar_2.setMaximum(100)
self.progressBar_3.setMaximum(100)
else:
self.timer.start(100,MainWindow) #启动计时器
self.pushButton.setText('停止') #设置按钮文本
#4个进度条最大最小值设置为0,滚动循环
self.progressBar.setMinimum(0)
self.progressBar.setMaximum(0)
self.progressBar_1.setInvertedAppearance(True) #设置进度反方向显示
self.progressBar_1.setMinimum(0)
self.progressBar_1.setMaximum(0)
self.progressBar_2.setMinimum(0)
self.progressBar_2.setMaximum(0)
self.progressBar_3.setMinimum(0)
self.progressBar_3.setMaximum(0)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "跑马灯效果"))
self.pushButton.setText(_translate("MainWindow", "开始"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
2.自定义等待提示框
设置自定义等待提示框
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 437)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.loading = QtWidgets.QLabel(self.centralwidget)
self.loading.setGeometry(QtCore.QRect(200, 20, 500, 400))
self.loading.setStyleSheet("")
self.loading.setText("")
self.loading.setObjectName("loading")
self.pushButton_start = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_start.setGeometry(QtCore.QRect(250, 200, 100, 50))
self.pushButton_start.setObjectName("pushButton_start")
self.pushButton_stop = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_stop.setGeometry(QtCore.QRect(550, 200, 100, 50))
self.pushButton_stop.setObjectName("pushButton_stop")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.pushButton_start.clicked.connect(self.start_loading)
self.pushButton_stop.clicked.connect(self.stop_loading)
def start_loading(self):
self.gif = QtGui.QMovie(".\img\loading.gif") #加载gif
self.loading.setMovie(self.gif) #设置gif
self.gif.start()
def stop_loading(self):
self.gif.stop()
self.loading.clear()
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton_start.setText(_translate("MainWindow", "启动等待提示"))
self.pushButton_stop.setText(_translate("MainWindow", "停止等待提示"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
3.滑块:QSlider
Horizontal Slider:水平滑块
Vertical Slider:垂直滑块
使用滑块改变刻度值及标签中的字体大小
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(313, 196)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
#水平布局管理器
self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(20, 70, 251, 80))
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setObjectName("horizontalLayout")
#水平滑块
self.horizontalSlider = QtWidgets.QSlider(self.centralwidget)
self.horizontalSlider.setGeometry(QtCore.QRect(20, 10, 231, 22))
self.horizontalSlider.setMinimum(8)
self.horizontalSlider.setMaximum(72)
self.horizontalSlider.setSingleStep(1)#设置通过鼠标拖动时的步长值
self.horizontalSlider.setPageStep(1)#设置通过鼠标点击时的步长值
self.horizontalSlider.setProperty("value",8)#默认值为8
self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
self.horizontalSlider.setTickPosition(QtWidgets.QSlider.TicksAbove)
self.horizontalSlider.setTickInterval(3) #设置刻度间隔
self.horizontalSlider.setObjectName("horizontalSlider")
#垂直滑块
self.verticalSlider = QtWidgets.QSlider(self.centralwidget)
self.verticalSlider.setGeometry(QtCore.QRect(270, 20, 22, 171))
self.verticalSlider.setMinimum(8)
self.verticalSlider.setMaximum(72)
self.verticalSlider.setOrientation(QtCore.Qt.Vertical)
self.verticalSlider.setInvertedAppearance(True)#设置刻度反方向显示
self.verticalSlider.setTickPosition(QtWidgets.QSlider.TicksRight)
self.verticalSlider.setTickInterval(3) # 设置刻度间隔
self.verticalSlider.setObjectName("verticalSlider")
#label显示文字
self.label = QtWidgets.QLabel(self.horizontalLayoutWidget)
self.label.setAlignment(QtCore.Qt.AlignCenter)#设置文字居中对齐
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label) #label添加到水平布局管理器中
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
#为水平滑块绑定valueChanged信号,在值发生改变时发射
self.horizontalSlider.valueChanged.connect(self.setfontsize)
def setfontsize(self):
value = self.horizontalSlider.value()
self.verticalSlider.setValue(value)
self.label.setFont(QtGui.QFont("楷体",value))
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "敢想敢为,注重细节"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
二、树控件
1.TreeView:树视图
使用内置模型中的数据
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(663, 421)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.treeView = QtWidgets.QTreeView(self.centralwidget)
self.treeView.setGeometry(QtCore.QRect(0, 0, 471, 281))
self.treeView.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) #设置垂直滚动条按需显示
self.treeView.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) #设置水平滚动条按需显示
#双击或按下回车,树节点可编辑
self.treeView.setEditTriggers(QtWidgets.QAbstractItemView.DoubleClicked|QtWidgets.QAbstractItemView.EditKeyPressed)
#设置树节点为单选
self.treeView.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
self.treeView.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) #设置选中节点时为整行选中
self.treeView.setAutoExpandDelay(-1) #设置自动展开的延时为-1,表示自动展开不可用
self.treeView.setItemsExpandable(True) #设置是否可以展开项
self.treeView.setSortingEnabled(True) #设置单击头部可排序
self.treeView.setWordWrap(True) #设置自动换行
self.treeView.setHeaderHidden(False) #设置不隐藏头部
self.treeView.setExpandsOnDoubleClick(True) #设置双击可以展开节点
self.treeView.setObjectName("treeView")
self.treeView.header().setVisible(True) #设置显示头部
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
model = QtWidgets.QDirModel() #创建存储文件系统的模型
self.treeView.setModel(model) #为树控件设置数据模型
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
使用自定义数据
使用TreeView显示各个班级的学生成绩信息
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(737, 511)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
#树视图
self.treeView = QtWidgets.QTreeView(self.centralwidget)
self.treeView.setGeometry(QtCore.QRect(0, 0, 421, 201))
self.treeView.setObjectName("treeView")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
model = QtGui.QStandardItemModel() #创建数据模型
model.setHorizontalHeaderLabels(['年级','班级','姓名','分数'])
#姓名列表
name = ['马云','李彦宏','刘强东','任正非','程维']
score = [65,78,89,90,69]
import random
#设置数据
for i in range(0,6):
#一级节点:年级,只设第一列
grade = QtGui.QStandardItem(("%s年级")%(i+1))
model.appendRow(grade)
for j in range(0,4):
#二级节点,班级,姓名,分数
itemClass = QtGui.QStandardItem(("%s班")%(j+1))
itemName = QtGui.QStandardItem(name[random.randrange(5)])
itemScore = QtGui.QStandardItem(str(score[random.randrange(5)]))
#二级节点添加到一级节点上
grade.appendRow([QtGui.QStandardItem(""),itemClass,itemName,itemScore])
self.treeView.setModel(model)#为TreeView设置数据模型
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
2.TreeWidge:树控件
使用TreeWidget控件显示树结构
实例6.6
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QTreeWidgetItem
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(564, 436)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.treeWidget = QtWidgets.QTreeWidget(self.centralwidget)
self.treeWidget.setGeometry(QtCore.QRect(0,0,564,436))
self.treeWidget.setObjectName("treeWidget")
self.treeWidget.setColumnCount(2)
self.treeWidget.setHeaderLabels(['姓名','职务'])
root=QTreeWidgetItem(self.treeWidget)#创建节点
root.setText(0,'组织结构') #设置顶级节点文本
#定义字典,存储树结构中显示的数据
dict={'任正非':'华为董事长','马云':'阿里巴巴创始人','李彦宏':'百度CEO'}
for key,value in dict.items():
child=QTreeWidgetItem(root)#创建子节点
child.setText(0,key)
child.setText(1,value)
self.treeWidget.addTopLevelItem(root)#将创建的树节点添加到树控件中
self.treeWidget.expandAll()#展开所有树节点
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
为节点设置图标
为实例6.6中的第一列每个企业家姓名前设置图标
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QTreeWidgetItem
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(564, 436)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.treeWidget = QtWidgets.QTreeWidget(self.centralwidget)
self.treeWidget.setGeometry(QtCore.QRect(0,0,564,436))
self.treeWidget.setObjectName("treeWidget")
self.treeWidget.setColumnCount(2)
self.treeWidget.setHeaderLabels(['姓名','职务'])
root=QTreeWidgetItem(self.treeWidget)#创建节点
root.setText(0,'组织结构') #设置顶级节点文本
#定义字典,存储树结构中显示的数据
dict={'任正非':'华为董事长','马云':'阿里巴巴创始人','李彦宏':'百度CEO'}
for key,value in dict.items():
child=QTreeWidgetItem(root)#创建子节点
child.setText(0,key)
child.setText(1,value)
if key=='任正非':
child.setIcon(0,QtGui.QIcon('img/huawei.jpg'))
elif key=='马云':
child.setIcon(0,QtGui.QIcon('img/albb.jpg'))
if key=='李彦宏':
child.setIcon(0,QtGui.QIcon('img/baidu.png'))
self.treeWidget.addTopLevelItem(root)#将创建的树节点添加到树控件中
self.treeWidget.expandAll()#展开所有树节点
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
三、分割控件
1.QFrame:分割线
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(604, 452)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(10,50,261,16))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(10, 80,261,16))
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(10, 110,261,16))
self.label_3.setObjectName("label_3")
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setGeometry(QtCore.QRect(5, 10, 261,16))
self.label_4.setObjectName("label_4")
self.label_5 = QtWidgets.QLabel(self.centralwidget)
self.label_5.setGeometry(QtCore.QRect(350,120,50,101))
self.label_5.setObjectName("label_5")
self.label_6 = QtWidgets.QLabel(self.centralwidget)
self.label_6.setGeometry(QtCore.QRect(420,120,50,101))
self.label_6.setObjectName("label_6")
self.label_7 = QtWidgets.QLabel(self.centralwidget)
self.label_7.setGeometry(QtCore.QRect(470, 120, 50, 101))
self.label_7.setObjectName("label_7")
self.label_8 = QtWidgets.QLabel(self.centralwidget)
self.label_8.setGeometry(QtCore.QRect(350, 5, 120, 30))
self.label_8.setObjectName("label_8")
self.line = QtWidgets.QFrame(self.centralwidget)
self.line.setGeometry(QtCore.QRect(70,50,261,16))
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)#下沉显示的边框阴影
self.line.setLineWidth(8)
self.line.setMidLineWidth(8)
self.line.setFrameShape(QtWidgets.QFrame.HLine)
self.line.setObjectName("line")
self.line_2 = QtWidgets.QFrame(self.centralwidget)
self.line_2.setGeometry(QtCore.QRect(70,80,261,16))
self.line_2.setFrameShadow(QtWidgets.QFrame.Plain) #无阴影
self.line_2.setLineWidth(8)
self.line_2.setMidLineWidth(8)
self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
self.line_2.setObjectName("line_2")
self.line_3 = QtWidgets.QFrame(self.centralwidget)
self.line_3.setGeometry(QtCore.QRect(70,110,261,16))
self.line_3.setFrameShape(QtWidgets.QFrame.HLine)
self.line_3.setFrameShadow(QtWidgets.QFrame.Raised) #凸起显示的边框阴影
self.line_3.setLineWidth(8)
self.line_3.setMidLineWidth(8)
self.line_3.setObjectName("line_3")
self.line_4 = QtWidgets.QFrame(self.centralwidget)
self.line_4.setGeometry(QtCore.QRect(370,50,16,101))
self.line_4.setLineWidth(4)
self.line_4.setMidLineWidth(4)
self.line_4.setFrameShape(QtWidgets.QFrame.VLine)
self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken) #垂直分割线下沉显示
self.line_4.setObjectName("line_4")
self.line_5 = QtWidgets.QFrame(self.centralwidget)
self.line_5.setGeometry(QtCore.QRect(430,50,16,101))
self.line_5.setFrameShape(QtWidgets.QFrame.VLine)
self.line_5.setFrameShadow(QtWidgets.QFrame.Plain)#无阴影
self.line_5.setLineWidth(4)
self.line_5.setMidLineWidth(4)
self.line_5.setObjectName("line_5")
self.line_6 = QtWidgets.QFrame(self.centralwidget)
self.line_6.setGeometry(QtCore.QRect(480,50,16,101))
self.line_6.setFrameShape(QtWidgets.QFrame.VLine)
self.line_6.setLineWidth(4)
self.line_6.setMidLineWidth(4)
self.line_6.setFrameShadow(QtWidgets.QFrame.Raised)
self.line_6.setObjectName("line_6")
self.line_7 = QtWidgets.QFrame(self.centralwidget)
self.line_7.setGeometry(QtCore.QRect(330, 0, 20, 200))
self.line_7.setFrameShape(QtWidgets.QFrame.VLine)
self.line_7.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_7.setObjectName("line_7")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 604, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "Sunken"))
self.label_2.setText(_translate("MainWindow", "Plain"))
self.label_3.setText(_translate("MainWindow", "Raised"))
self.label_4.setText(_translate("MainWindow", "水平分割线"))
self.label_5.setText(_translate("MainWindow", "Sunken"))
self.label_6.setText(_translate("MainWindow", "Plain"))
self.label_7.setText(_translate("MainWindow", "Raised"))
self.label_8.setText(_translate("MainWindow", "垂直分割线"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
2.QSpacerItem:弹簧
弹簧控件只在设计窗口时显示,实际运行中不显示
使用弹簧控件改变控件位置
四、其他控件
1.Dial:旋钮控件
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(568, 436)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
#垂直布局管理器,显示文字
self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(130,20,251,81))
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout.setContentsMargins(0,0,0,0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.dial = QtWidgets.QDial(self.centralwidget)
self.dial.setGeometry(QtCore.QRect(20,20,71,71))
self.dial.setMinimum(8)
self.dial.setMaximum(71)
self.dial.setNotchesVisible(True)
self.dial.setObjectName("dial")
self.label = QtWidgets.QLabel(self.horizontalLayoutWidget)
self.label.setAlignment(QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.dial.valueChanged.connect(self.setfontsize)
def setfontsize(self):
value = self.dial.value()
self.label.setFont(QtGui.QFont("楷体",value))
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "敢想敢为,注重细节"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
2.QScrollBar:滚动条
Horizontal Scroll Bar:水平滚动条
Vertical Scroll Bar:垂直滚动条
滚动条控件也是一种特殊的滑块控件