Python GUI设计——PyQt5的学习实践记录day09(PyQt5常用控件【三】)

一、容器控件

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())  # 程序关闭时退出进程
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IRUIRUI__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值