PyQt控件部分(二)

本文介绍了PyQt中的一些控件及其功能,包括ComboBox、FontComboBox、ListGroupBox、TabWidget、日期时间控件和CalendarWidget。通过信号与槽机制,实现了控件的实时交互,如下拉文本的显示、字体变更、选项卡动态增删、日历选中日期的打印等。同时,文章展示了相关的代码实现,以帮助读者理解。
摘要由CSDN通过智能技术生成

目录

结果

1.下路组合框选中的文字用label文本实时显示

 2.字体组合框选中的字体可以改变label文本的字体

3.使用分组框使单选按钮可以分组选择

4.选项卡的实时添加与删除(用按钮实现)

5.日期和时间控件显示本地时间(但不会变化,不是实时的)

 6.日历控件选中一个日期,会在控制台输出日期


这次学习了一些新的控件,下次估计就要开始学习PyQt5的高级控件了。

这次学习的控件有:

ComboBox:下拉组合框
FontComoBox:字体组合框
ListWidget:列表
GroupBox:分组框
TabWidget:选项卡
日期和时间控件:DateTimeEdit、DateEdit、TimeEdit
CalendarWidget:日历控件

当然对于控件而言,只是摆在那里,是实现不了什么功能的。

要利用控件实现一定的功能,需要知道该控件会发射什么信号,并且让该信号绑定一个方法。

而我们只需要把想执行的逻辑操作和想法,写在方法里即可。

以上控件的发射的一些常用信号:

ComboBox控件会发射currentIndexChanged(在下拉索引发生改变时发射)
FontComboBox控件和ComboBox相似。

TabWidget控件会发射currentChanged信号(在切换选项卡时,发射)
日期和时间控件会发射三种信号:timeChanged、dateChanged、datetTimeChanged
在时间改变时发射timeChanged信号
在日期改变时发射dateChanged信号
在时间或者日期改变时发射dateTimeChanged信号

CalendarWidget控件会发射selectionChanged信号
当选中日期发生变化时发射selectionChanged信号

本次学习实现了

1.下路组合框选中的文字用label文本实时显示,

2.字体组合框选中的字体可以改变label文本的字体,

3.使用分组框使单选按钮可以分组选择。

4.选项卡的实时添加与删除(用按钮实现),

5.日期和时间控件显示本地时间(但不会变化,不是实时的),

6.日历控件选中一个日期,会在控制台输出日期。

控制台就是print输出的地方.

上代码:

label_2.py:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'label_2.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.

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        # 下拉组合框(ComboBox)
        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QtCore.QRect(10, 10, 80, 30))
        self.comboBox.setObjectName("comboBox")
        mid = '无'
        list = ['篮球', '足球', '乒乓球', '羽毛球']
        self.comboBox.addItem(mid)      # 给组合框中添加选项--添加单个变量
        self.comboBox.addItems(list)    # 给组合框中添加选项--添加列表中所有变量
        self.comboBox.currentIndexChanged.connect(self.showinfo_comboBox)   # 改变索引,发射信号,执行方法内的程序

        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 40, 210, 30))
        self.label.setObjectName("label")
        self.label.setText("你最喜欢的运动是:" + self.comboBox.currentText())

        # 字体组合框(FontComboBox)--主要用于改变文本的字体
        self.fontComboBox = QtWidgets.QFontComboBox(self.centralwidget)
        self.fontComboBox.setGeometry(QtCore.QRect(10, 70, 100, 30))
        self.fontComboBox.setObjectName("fontComboBox")
        self.fontComboBox.setFontFilters(QtWidgets.QFontComboBox.AllFonts)  # 在组合框中显示所有字体
        self.fontComboBox.currentIndexChanged.connect(self.showinfo_comboBox)
        # 列表(ListWidget)
        self.listWidget = QtWidgets.QListWidget(self.centralwidget)
        self.listWidget.setGeometry(QtCore.QRect(200, 0, 300, 200))
        self.listWidget.setObjectName("listWidget")
        self.listWidget.setViewMode(QtWidgets.QListView.ListMode)       # 设置以列表形式显示数据
        self.listWidget.setWordWrap(True)   # 设置开启自动换行
        self.listWidget.addItems(list)


        dict = {'1':'篮球','2':'足球','3':'羽毛球','4':'乒乓球','5':'橄榄球'}     # 向列表中添加字典中的键值对
        from collections import OrderedDict     # 字典默认是无序的,我们可以导入这个模块
        dict = OrderedDict(dict)                # 使字典变为有序字典
        for key, value in dict.items():
            self.item = QtWidgets.QListWidgetItem(self.listWidget)      # 在列表中单独创建列表项,
            self.item.setText(key+':'+value)                            # 从而可以一个一个的添加值
            self.item.setToolTip(value)                                 # 一个一个的设置提示

        # 分组框(GroupBox)-- 子窗口控件
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox.setGeometry(QtCore.QRect(0, 100, 200, 100))
        self.groupBox.setObjectName("groupBox")
        self.groupBox.setTitle('分组1')

        self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox_2.setGeometry(QtCore.QRect(0, 200, 200, 100))
        self.groupBox_2.setObjectName("groupBox_2")
        self.groupBox_2.setTitle('分组2')

        # 单选按钮(RadioButton)--同一组的单选按钮只能选择一个
        self.radioButton = QtWidgets.QRadioButton(self.groupBox)    # 如果要把控件放到分组框中,
        self.radioButton.setGeometry(QtCore.QRect(0, 0, 80, 50))    # 直接把父窗口设置为分组框即可。
        self.radioButton.setObjectName("radioButton")
        self.radioButton.setText("选择A")
        self.radioButton_2 = QtWidgets.QRadioButton(self.groupBox)
        self.radioButton_2.setGeometry(QtCore.QRect(80, 0, 80, 50))
        self.radioButton_2.setObjectName("radioButton_2")
        self.radioButton_2.setText("选择B")

        self.radioButton_3 = QtWidgets.QRadioButton(self.groupBox_2)
        self.radioButton_3.setGeometry(QtCore.QRect(0, 0, 80, 50))
        self.radioButton_3.setObjectName("radioButton_3")
        self.radioButton_3.setText("选择C")
        self.radioButton_4 = QtWidgets.QRadioButton(self.groupBox_2)
        self.radioButton_4.setGeometry(QtCore.QRect(80, 0, 80, 50))
        self.radioButton_4.setObjectName("radioButton_4")
        self.radioButton_4.setText("选择D")

        # 选项卡(TabWidget)
        self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
        self.tabWidget.setGeometry(QtCore.QRect(0,400,400,150))
        self.tabWidget.setTabsClosable(True)
        # 设置按钮用于添加选项窗口
        self.pushBotton = QtWidgets.QPushButton(self.centralwidget)
        self.pushBotton.setGeometry(QtCore.QRect(400, 400, 60, 30))
        self.pushBotton.setObjectName("pushBotton")
        self.pushBotton.setText('添加')
        self.pushBotton.clicked.connect(self.addtab)
        # 设置按钮用于删除一个窗口
        self.pushBotton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushBotton_2.setGeometry(QtCore.QRect(400, 460, 60, 30))
        self.pushBotton_2.setObjectName("pushBotton_2")
        self.pushBotton_2.setText('删除')
        self.pushBotton_2.clicked.connect(self.deltab)

        # 日期和时间控件(DataTimeEdit)
        self.dateTimeEdit = QtWidgets.QDateTimeEdit(self.centralwidget)
        self.dateTimeEdit.setGeometry(QtCore.QRect(500, 200, 200, 30))
        self.dateTimeEdit.setObjectName("dateTimeEdit")
        self.dateTimeEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")   # 设置显示形式
        self.dateTimeEdit.setCalendarPopup(True)        # 设置可以弹出日历
        # self.dateTimeEdit.setTime(QtCore.QTime(1,59))         # 设置时间为1:59
        self.dateTimeEdit.setDateTime(QtCore.QDateTime.currentDateTime())   # 设置显示获取当前日期时间
        print(self.dateTimeEdit.text())         # 字符串类型
        print(type(self.dateTimeEdit.text()))
        print(self.dateTimeEdit.dateTime())     # QDateTime类型

        # 日历控件(CalendarWidget)
        self.calendarWidget = QtWidgets.QCalendarWidget(self.centralwidget)
        self.calendarWidget.setGeometry(QtCore.QRect(480, 250, 310, 350))
        self.calendarWidget.setObjectName("calendarWidget")
        self.calendarWidget.setFirstDayOfWeek(QtCore.Qt.Monday)     # 设置每周的第一天为星期一
        self.calendarWidget.setGridVisible(True)        # 设置网格线可见
        self.calendarWidget.setSelectionMode(QtWidgets.QCalendarWidget.SingleSelection) # 设置可以选中一个日期
        self.calendarWidget.setDateEditEnabled(True)        # 设置日期可以编辑

        self.calendarWidget.selectionChanged.connect(self.getdate)  # 当选中日期改变时,发射selectionChange信号





        MainWindow.setCentralWidget(self.centralwidget)


        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 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 showinfo_comboBox(self):
        # 改变字体--字体组合框
        print(self.fontComboBox.currentText())
        self.label.setFont(QtGui.QFont(self.fontComboBox.currentText()))
        # 显示文字--下拉组合框中的文字
        self.label.setText("你最喜欢的运动是:"+self.comboBox.currentText())

    def addtab(self):   # 添加选项卡
        self.atab = QtWidgets.QWidget()     # 创建选项卡对象
        name = 'tab_'+str(self.tabWidget.count())
        self.atab.setObjectName(name)           # 设置其对象名
        self.tabWidget.addTab(self.atab, name)

    def deltab(self):   # 删除选项卡
        self.tabWidget.removeTab(self.tabWidget.currentIndex()) # 移除当前选项卡
        # self.tabWidget.currentIndex() ------ 得到当前选项卡的索引--从0开始逐渐加一

    def getdate(self):
        date = QtCore.QDate(self.calendarWidget.selectedDate()) # 获取当前选中日期的QDate对象
        # 获取Qdate对象的年、月、日。
        year = date.year()
        month = date.month()
        day = date.day()
        print('日期', end=':')
        print(year, month, day, sep='-')


    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

label_2_two.py

from label_2 import Ui_MainWindow
from PyQt5 import QtWidgets

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.下路组合框选中的文字用label文本实时显示

 2.字体组合框选中的字体可以改变label文本的字体

3.使用分组框使单选按钮可以分组选择

4.选项卡的实时添加与删除(用按钮实现)

点击‘’添加‘’按钮

 点击“删除按钮”


5.日期和时间控件显示本地时间(但不会变化,不是实时的)

 6.日历控件选中一个日期,会在控制台输出日期

 

这就是结果了。

 截图的话,不知道为什么截不到鼠标。

可能看的有一点迷糊。

望各位前辈指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值