目录
一、容器控件
1.1 GroupBox:分组框
【GroupBox:主要为其他控件提供分组,并按照控件的分组来细分窗口二点功能】
QGroupBox类的常用方法及说明👇:
方法 | 说明 |
---|---|
setAlignment() | 设置对齐方式,有水平和垂直两种,分别如下👇: 水平对齐方式 : Qt.AlignLeft:左对齐 Qt.AlignHCenter:水平居中对齐 Qt.AlignRight:右对齐 Qt.AlignJustify:两端对齐 垂直对齐方式: Qt.AlignTop:顶部对齐 Qt.AlignVCenter:垂直居中 Qt.AlignBottom:底部对齐 |
setTitle() | 设置分组标题 |
setFlat() | 设置是否以扁平样式显示 |
【QGroupBox类中最常用的是setTitle()方法,如下👇:】
self.groupBox.setTitle("系统登陆")
1.2 TabWidget:选项卡
【TabWidget:可以将窗口设计成多页,以便使窗口的功能划分为多个部分,而每个部分都可以包括多个子控件】
QTabWidget类的常用方法及说明👇:
方法 | 说明 |
---|---|
addTab() | 添加选项卡 |
inserTab() | 插入选项卡 |
removeTab() | 删除选项卡 |
currentWidget() | 获取当前选项卡 |
currentIndex() | 获取当前选项卡的索引 |
setCurrentIndex() | 设置当前选项卡的索引 |
setCurrentWidget() | 设置当前选项卡 |
setTabPosition() | 设置选项卡的标题位置,支持以下四个位置👇: QTabWidget.North: 标题在上方 QTabWidget.South: 下方 QTabWidget.West:左边 QTabWidget.East:右边 |
setTabsClosable() | 设置是否可以独立关闭选项卡(True / False) |
setTabText() | 设置选项卡标题文本 |
tabText() | 获取指定选项卡的标题文本 |
TabWidget在显示选项卡时,如果默认大小显示不下,会自动生成先前和先后的箭头,用户可以通过单击箭头,查看未显示的选项卡
TabWidget最常用的信号是currentChanged,该信号在切换选项卡时发射
示例:选项卡的动态添加和删除
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(331, 231)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setGeometry(QtCore.QRect(10, 10, 311, 111))
self.tabWidget.setObjectName("tabWidget")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.tabWidget.addTab(self.tab, "")
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setObjectName("tab_2")
self.tabWidget.addTab(self.tab_2, "")
self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(30, 120, 271, 51))
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setSpacing(50)
self.horizontalLayout.setObjectName("horizontalLayout")
self.pushButton = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.pushButton.setObjectName("pushButton")
self.horizontalLayout.addWidget(self.pushButton)
self.pushButton_2 = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.pushButton_2.setObjectName("pushButton_2")
self.horizontalLayout.addWidget(self.pushButton_2)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 331, 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)
self.pushButton.clicked.connect(self.addtab) # 为“添加”按钮绑定单击信号
self.pushButton_2.clicked.connect(self.deltab)
self.tabWidget.currentChanged.connect(self.gettab)
# 新增选项卡
def addtab(self):
self.atab = QtWidgets.QWidget() # 创建选项卡对象
name = "tab_"+str(self.tabWidget.count()+1) # 设置选项卡的对象名
self.atab.setObjectName(name) # 设置选项卡的对象名
self.tabWidget.addTab(self.atab, name) # 添加选项卡
# 删除选项卡
def deltab(self):
self.tabWidget.removeTab(self.tabWidget.currentIndex()) # 移除当前选项卡
# 获取选中的选项卡及索引
def gettab(self, currentIndex):
from PyQt5.QtWidgets import QMessageBox
QMessageBox.information(MainWindow, "提示", "您选择了 "+self.tabWidget.tabText(currentIndex)+" 选项卡,索引为:"+str(self.tabWidget.currentIndex()))
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "选项卡的动态添加和删除"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Tab 1"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Tab 2"))
self.pushButton.setText(_translate("MainWindow", "添 加"))
self.pushButton_2.setText(_translate("MainWindow", "删 除"))
【当删除某个选项卡时,选项卡会自动切换到前一个,因此也会弹出相应的信息提示】
1.3 ToolBox:工具盒
【ToolBox:主要提供一种列状的层叠选项卡】
QToolBox类的常用方法及说明👇:
方法 | 说明 |
---|---|
addItem() | 添加选项卡 |
setCurrentIndex() | 设置当前选中的选项卡索引 |
setItemIcon() | 设置选项卡的图标 |
setItemText() | 设置选项卡的文本 |
setItemEnable() | 设置选项卡是否可用 |
inserItem() | 插入新选项卡 |
removeItem() | 移除选项卡 |
itemText() | 获取选项卡的文本 |
currentIndec() | 获取当前选项卡的索引 |
最常用的信号是currentChanged,该信号在切换选项卡时发射
示例:实现仿QQ抽屉效果
【仿QQ抽屉】
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'test516.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(252, 494)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
# 创建ToolBox工具盒
self.toolBox = QtWidgets.QToolBox(self.centralwidget)
self.toolBox.setGeometry(QtCore.QRect(0, 0, 241, 441))
self.toolBox.setObjectName("toolBox")
# 我的好友设置
self.page = QtWidgets.QWidget()
self.page.setGeometry(QtCore.QRect(0, 0, 241, 289))
self.page.setObjectName("page")
self.verticalLayoutWidget = QtWidgets.QWidget(self.page)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 0, 160, 193))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.toolButton_2 = QtWidgets.QToolButton(self.verticalLayoutWidget)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/qq/Icon.jpeg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.toolButton_2.setIcon(icon)
self.toolButton_2.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.toolButton_2.setObjectName("toolButton_2")
self.verticalLayout.addWidget(self.toolButton_2)
self.toolButton_4 = QtWidgets.QToolButton(self.verticalLayoutWidget)
self.toolButton_4.setIcon(icon)
self.toolButton_4.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.toolButton_4.setObjectName("toolButton_4")
self.verticalLayout.addWidget(self.toolButton_4)
self.toolButton_5 = QtWidgets.QToolButton(self.verticalLayoutWidget)
self.toolButton_5.setIcon(icon)
self.toolButton_5.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.toolButton_5.setObjectName("toolButton_5")
self.verticalLayout.addWidget(self.toolButton_5)
self.toolButton = QtWidgets.QToolButton(self.verticalLayoutWidget)
self.toolButton.setIcon(icon)
self.toolButton.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.toolButton.setObjectName("toolButton")
self.verticalLayout.addWidget(self.toolButton)
self.toolButton_6 = QtWidgets.QToolButton(self.verticalLayoutWidget)
self.toolButton_6.setIcon(icon)
self.toolButton_6.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.toolButton_6.setObjectName("toolButton_6")
self.verticalLayout.addWidget(self.toolButton_6)
self.toolButton_3 = QtWidgets.QToolButton(self.verticalLayoutWidget)
self.toolButton_3.setIcon(icon)
self.toolButton_3.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.toolButton_3.setObjectName("toolButton_3")
self.verticalLayout.addWidget(self.toolButton_3)
self.toolBox.addItem(self.page, icon, "")
# 同学设置
self.page_2 = QtWidgets.QWidget()
self.page_2.setGeometry(QtCore.QRect(0, 0, 231, 279))
self.page_2.setObjectName("page_2")
self.verticalLayoutWidget_2 = QtWidgets.QWidget(self.page_2)
self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(10, 0, 160, 94))
self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2)
self.verticalLayout_2.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.toolButton_9 = QtWidgets.QToolButton(self.verticalLayoutWidget_2)
self.toolButton_9.setIcon(icon)
self.toolButton_9.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.toolButton_9.setObjectName("toolButton_9")
self.verticalLayout_2.addWidget(self.toolButton_9)
self.toolButton_10 = QtWidgets.QToolButton(self.verticalLayoutWidget_2)
self.toolButton_10.setIcon(icon)
self.toolButton_10.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.toolButton_10.setObjectName("toolButton_10")
self.verticalLayout_2.addWidget(self.toolButton_10)
self.toolButton_11 = QtWidgets.QToolButton(self.verticalLayoutWidget_2)
self.toolButton_11.setIcon(icon)
self.toolButton_11.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.toolButton_11.setObjectName("toolButton_11")
self.verticalLayout_2.addWidget(self.toolButton_11)
self.toolBox.addItem(self.page_2, icon, "")
# 同事设置
self.page_3 = QtWidgets.QWidget()
self.page_3.setObjectName("page_3")
self.verticalLayoutWidget_3 = QtWidgets.QWidget(self.page_3)
self.verticalLayoutWidget_3.setGeometry(QtCore.QRect(10, 0, 160, 71))
self.verticalLayoutWidget_3.setObjectName("verticalLayoutWidget_3")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_3)
self.verticalLayout_3.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.toolButton_13 = QtWidgets.QToolButton(self.verticalLayoutWidget_3)
self.toolButton_13.setIcon(icon)
self.toolButton_13.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.toolButton_13.setObjectName("toolButton_13")
self.verticalLayout_3.addWidget(self.toolButton_13)
self.toolButton_14 = QtWidgets.QToolButton(self.verticalLayoutWidget_3)
self.toolButton_14.setIcon(icon)
self.toolButton_14.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.toolButton_14.setObjectName("toolButton_14")
self.verticalLayout_3.addWidget(self.toolButton_14)
self.toolBox.addItem(self.page_3, icon, "")
# 特别关注设置
self.page_4 = QtWidgets.QWidget()
self.page_4.setObjectName("page_4")
self.verticalLayoutWidget_4 = QtWidgets.QWidget(self.page_4)
self.verticalLayoutWidget_4.setGeometry(QtCore.QRect(10, 0, 160, 31))
self.verticalLayoutWidget_4.setObjectName("verticalLayoutWidget_4")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_4)
self.verticalLayout_4.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.toolButton_24 = QtWidgets.QToolButton(self.verticalLayoutWidget_4)
self.toolButton_24.setIcon(icon)
self.toolButton_24.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.toolButton_24.setObjectName("toolButton_24")
self.verticalLayout_4.addWidget(self.toolButton_24)
self.toolBox.addItem(self.page_4, icon, "")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 252, 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)
self.toolBox.setCurrentIndex(0) # 默认选择第一个页面
self.toolBox.layout().setSpacing(10)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "我的QQ"))
self.toolButton_2.setText(_translate("MainWindow", "白居易"))
self.toolButton_4.setText(_translate("MainWindow", "杜甫"))
self.toolButton_5.setText(_translate("MainWindow", "李清照"))
self.toolButton.setText(_translate("MainWindow", "李白"))
self.toolButton_6.setText(_translate("MainWindow", "陆游"))
self.toolButton_3.setText(_translate("MainWindow", "瑞瑞"))
self.toolBox.setItemText(self.toolBox.indexOf(self.page), _translate("MainWindow", "我的好友"))
self.toolButton_9.setText(_translate("MainWindow", "李清照"))
self.toolButton_10.setText(_translate("MainWindow", "李白"))
self.toolButton_11.setText(_translate("MainWindow", "陆游"))
self.toolBox.setItemText(self.toolBox.indexOf(self.page_2), _translate("MainWindow", "同学"))
self.toolButton_13.setText(_translate("MainWindow", "白居易"))
self.toolButton_14.setText(_translate("MainWindow", "杜甫"))
self.toolBox.setItemText(self.toolBox.indexOf(self.page_3), _translate("MainWindow", "同事"))
self.toolButton_24.setText(_translate("MainWindow", "瑞瑞"))
self.toolBox.setItemText(self.toolBox.indexOf(self.page_4), _translate("MainWindow", "特别关注"))
import qqIcon_rc
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow() # 创建窗体对象
ui = Ui_MainWindow() # 创建PyQt设计的窗体对象
ui.setupUi(MainWindow) # 调用PyQt窗体的方法对窗体对象进行初始化设置
MainWindow.show() # 显示窗体
sys.exit(app.exec()) # 程序关闭时退出进程
二、日期时间类控件
2.1 日期和时间控件
PyQt5中有三个日期时间控件:Date/TimeEdit控件、DateEdit控件和TimeEdit控件。
Date/TimeEdit控件对应的类是QDateTimeEdit,可以同时显示和编辑日期时间
DateEdit控件对应的类是QDateEdit,它是QDateTimeEdit的子类,只能显示和编辑日期
TimeEdit控件对应的类是QTimeEdit类,它同样是QDateTimeEdit的子类,只能显示和编辑时间
2.2 CalendarWidget:日历控件
示例:获取选中日期
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'test517.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(496, 437)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
# duiCalendarWidget控件进行设置,并为其信号绑定自定义槽函数_____________________________________________
self.calendarWidget = QtWidgets.QCalendarWidget(self.centralwidget)
self.calendarWidget.setGeometry(QtCore.QRect(20, 20, 451, 361))
# 设置默认选中的日期
self.calendarWidget.setSelectedDate(QtCore.QDate(2002, 2, 19))
# 设置最小日期
self.calendarWidget.setMinimumDate(QtCore.QDate(1920, 2, 19))
# 设置最大日期
self.calendarWidget.setMaximumDate(QtCore.QDate(9925, 2, 19))
# 设置每周的第一天为星期一
self.calendarWidget.setFirstDayOfWeek(QtCore.Qt.Monday)
# 设置网格线可见
self.calendarWidget.setGridVisible(True)
# 设置可以选中单个日期
self.calendarWidget.setSelectionMode(QtWidgets.QCalendarWidget.SingleSelection)
# 设置水平表头为简短形式,即“周一”形式
self.calendarWidget.setHorizontalHeaderFormat(QtWidgets.QCalendarWidget.ShortDayNames)
# 设置垂直表头为周数
self.calendarWidget.setVerticalHeaderFormat(QtWidgets.QCalendarWidget.ISOWeekNumbers)
self.calendarWidget.setNavigationBarVisible(True) # 设置导航栏
self.calendarWidget.setDateEditEnabled(True) # 设置日期可编辑
self.calendarWidget.setObjectName("calendarWidget")
#___________________________________________________________________________________
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 496, 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)
self.calendarWidget.selectionChanged.connect(self.getdate) # 选中日期变化时显示选择的日期
def getdate(self):
from PyQt5.QtWidgets import QMessageBox
date=QtCore.QDate(self.calendarWidget.selectedDate()) # 获取档期那选中的QDate对象
year=date.year() # 获取年份
month=date.month() # 获取月份
day=date.day() # 获取日期
QMessageBox.information(MainWindow,"提示", str(year)+"-"+str(month)+"-"+str(day))
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "获取选中的日期"))
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow() # 创建窗体对象
ui = Ui_MainWindow() # 创建PyQt设计的窗体对象
ui.setupUi(MainWindow) # 调用PyQt窗体的方法对窗体对象进行初始化设置
MainWindow.show() # 显示窗体
sys.exit(app.exec()) # 程序关闭时退出进程