PyQt6第四章控件功能之4.2常用控件(4.2.10日历:QCalendar)

4.2.10日历:QCalendar

日历控件属于QCalendar类,它基于月份的视图,通过鼠标或键盘选择日期,默认选中的是今天的日期。QCalendar类中的常用方法如下:

setDateRange():设置日期范围供选择

setFirstDayOfWeek():重新设置星期的第一天,默认是星期日。

参数枚举: Qt.Monday:星期一

Qt.Tuesday:星期二

Qt.Wednesday:星期三

Qt.Thursday:星期四

Qt.Friday:星期五

Qt.Saturday:星期六

Qt.Sunday:星期日

setMinimumDate():设置最大日期

setMaximumDate():设置最小日期

setSelectedDate():设置一个QDate对象,作为日期控件所选定的日期

maximumDate:获取日历控件的最大日期

minimumDate:获取日历控件的最小日期

selectedDate():返回当前选定的日期

setGridvisible():设置日历控件是否显示网格

QCalendarWidget类提供了下列4个信号:

clicked:单击日期时发送该信号。

selectionChanged():日期改变时发送该信号。

activated():日历活化时发送该信号。

currentPageChanged():改变页时发送该信号。

【例4.13】QCalendar日历测试。 代码如下(calendar.py): 运行程序,显示如图。

import sys  # 导入sys模块,用于处理Python解释器相关的操作,如命令行参数等。

from PyQt6 import QtCore  # 从PyQt6库中导入QtCore模块,包含PyQt6的核心非GUI功能。

from PyQt6.QtWidgets import *  # 从PyQt6库中导入QtWidgets模块,包含所有GUI组件。

from PyQt6.QtCore import QDate  # 从PyQt6的QtCore模块中单独导入QDate类,用于处理日期。


class MyWidget(QWidget):  # 定义一个名为MyWidget的类,继承自QWidget,作为主窗口。

    def __init__(self):  # 初始化方法,当创建MyWidget对象时自动调用。

        super(MyWidget, self).__init__()  # 调用父类QWidget的初始化方法。

        self.setGeometry(100, 100, 300, 240)  # 设置窗口的位置和大小,分别为x=100, y=100, 宽=300, 高=240。

        self.setWindowTitle('Calendar测试')  # 设置窗口的标题为“Calendar测试”。

        self.initUI()  # 调用自定义的initUI方法来初始化用户界面。

    def initUI(self):  # 初始化用户界面的方法。

        self.cal = QCalendarWidget(self)  # 创建一个日历控件,并设置其父窗口为当前MyWidget对象。

        self.cal.setMinimumDate(QDate(2000, 1, 1))  # 设置日历控件可显示的最小日期为2000年1月1日。

        self.cal.setMaximumDate(QDate(2100, 1, 1))  # 设置日历控件可显示的最大日期为2100年1月1日。

        self.cal.setGridVisible(True)  # 设置日历控件中的网格可见。

        self.cal.move(10, 10)  # 将日历控件移动到窗口的(10, 10)位置。

        self.cal.clicked[QtCore.QDate].connect(self.labShow)  # 当在日历控件中点击某个日期时,触发labShow方法。

        date = self.cal.selectedDate()  # 获取当前日历控件中选中的日期。

        self.lb = QLabel(self)  # 创建一个QLabel对象,用于显示日期,设置其父窗口为当前MyWidget对象。

        self.lb.setText(date.toString("yyyy-MM-dd ddd"))  # 设置QLabel的文本为选中的日期的格式化字符串。

        self.lb.move(10, 210)  # 将QLabel移动到窗口的(10, 210)位置。

    def labShow(self, date):  # 定义一个方法,用于显示用户点击的日期。

        self.lb.setText(date.toString("yyyy-MM-dd ddd"))  # 设置QLabel的文本为用户点击的日期的格式化字符串。


if __name__ == '__main__':  # 检查当前脚本是否作为主程序运行。

    app = QApplication(sys.argv)  # 创建一个QApplication对象,这是PyQt6应用程序的入口点。

    w = MyWidget()  # 创建一个MyWidget对象。

    w.show()  # 显示MyWidget窗口。

    sys.exit(app.exec())  # 进入Qt应用程序的主循环,等待用户交互。当应用程序结束时,通过sys.exit退出Python解释器。
这段代码主要实现了一个简单的PyQt6 GUI应用程序,该应用程序包含一个标签(QLabel)用于显示提示信息,一个数值选择框(QSpinBox)用于用户选择或输入数字,以及另一个标签用于显示用户选择的数字。

使用的布局和控件

  • 布局
    • QHBoxLayout:水平布局,用于将标签和数值选择框水平放置。
    • QVBoxLayout:垂直布局,用于组织整个窗口的部件,包括水平布局和第二个标签。
  • 控件
    • QWidget:作为主窗口的基类。
    • QLabel:用于显示文本标签的控件。这里有两个标签,一个用于显示提示信息“选择或者输入数字:”,另一个用于显示用户输入的数值。
    • QSpinBox:一个数值选择框控件,允许用户通过点击箭头或使用键盘来选择或输入一个整数。

说明:

1.在窗口上创建日历控件对象,设置日历日期显示范围,显示网格,移动到窗口指定位置,关联单机日历操作的槽函数。

2.在窗口上创建标签控件对象,移到日历控件下面合适位置,调用selectedDate方法检索日历默认日期(当前日期),将日期对象转换为指定格式字符串在标签控件上显示。 

关键语句

  1. self.setWindowTitle("SpinBox测试"):设置窗口的标题为“SpinBox测试”。

  2. self.resize(300, 100):设置窗口的大小为300x100像素。

  3. self.sb = QSpinBox():创建一个QSpinBox实例,用于用户选择或输入数值。

  4. self.sb.valueChanged.connect(self.valueFunc):连接QSpinBox的valueChanged信号到valueFunc槽函数。当用户在QSpinBox中选择或输入新的数值时,这个信号会被触发,调用valueFunc函数。

  5. self.lb2.setAlignment(Qt.AlignmentFlag.AlignCenter):设置第二个标签(用于显示数值的)的文本对齐方式为居中。

  6. hLayout.addWidget(self.lb1) 和 hLayout.addWidget(self.sb):将提示标签和数值选择框添加到水平布局中。

  7. vLayout_ww.addLayout(hLayout) 和 vLayout_ww.addWidget(self.lb2):将水平布局和第二个标签添加到垂直布局中。

  8. def valueFunc(self):定义了一个槽函数,当QSpinBox的值改变时会被调用。

  9. self.lb2.setText("输入值: "+str(self.sb.value())):在valueFunc函数中,获取QSpinBox的当前值,将其转换为字符串,并设置到第二个标签的文本中,以显示用户选择的数值。

总的来说,这段代码实现了一个简单的GUI窗口,用户可以通过数值选择框(QSpinBox)选择或输入一个数字,这个数字随后会显示在窗口中的一个标签中。这种类型的控件常用于需要用户输入一个整数范围内的值的场景。
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值