鱼C论坛

 找回密码
 立即注册
查看: 1553|回复: 4

[已解决]请教,如何控制QDateTimeEdit?

[复制链接]
发表于 2023-7-12 20:15:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 fengma 于 2023-7-12 20:28 编辑
  1. import sys
  2. from PyQt5.QtGui import *
  3. from PyQt5.QtWidgets import *
  4. from PyQt5.QtCore import QDate,   QDateTime , QTime

  5. class DateTimeEditDemo(QWidget):
  6.     def __init__(self):
  7.         super(DateTimeEditDemo, self).__init__()
  8.         self.initUI()

  9.     def initUI(self):
  10.         #设置窗口的标题与初始大小
  11.         self.setWindowTitle('QDateTimeEdit例子')
  12.         self.resize(300, 90)

  13.         #垂直布局
  14.         vlayout = QVBoxLayout()

  15.         #实例化编辑时间日期的控件

  16.         #指定当前日期时间为控件的日期时间
  17.         mydateTimeEdit = QDateTimeEdit(QDateTime.currentDateTime(), self)
  18.         mydateTimeEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")

  19.         #布局控件添加,设置主窗口的布局
  20.         vlayout.addWidget( mydateTimeEdit)

  21.         self.setLayout(vlayout)

  22. if __name__ == '__main__':
  23.     app = QApplication(sys.argv)
  24.     demo = DateTimeEditDemo()
  25.     demo.show()
  26.     sys.exit(app.exec_())
复制代码

请教,在这段代码例子中,每当北京时间发生变化时,自动更新mydateTimeEdit里的值。代码如何写呢?
最佳答案
2023-7-12 20:15:42
要实现当北京时间发生变化时自动更新 mydateTimeEdit 里的值,可以使用 QTimer 定时器来定期更新。

首先,在 DateTimeEditDemo 类的 initUI 方法中,创建一个定时器对象,并连接到一个槽方法上。例如,我们可以创建一个名为 updateDateTime 的槽方法:
  1. def initUI(self):
  2.     # 其他代码...
  3.     timer = QTimer(self)
  4.     timer.timeout.connect(self.updateDateTime)
  5.     timer.start(1000)  # 设置定时器间隔为1秒
  6. def updateDateTime(self):
  7.     # 使用北京时间更新 QDateTimeEdit 的值
  8.     currentDateTime = QDateTime.currentDateTime()
  9.     mydateTimeEdit.setDateTime(currentDateTime)
复制代码

updateDateTime 方法中,我们通过调用 QDateTime.currentDateTime() 获取当前的北京时间,然后使用 setDateTime 方法将其设置给 mydateTimeEdit 控件。

最后,记得将 mydateTimeEdit 声明为 self.mydateTimeEdit,以便在其他方法中可以访问它。

完整代码示例如下:
  1. import sys
  2. from PyQt5.QtGui import *
  3. from PyQt5.QtWidgets import *
  4. from PyQt5.QtCore import QDate, QDateTime, QTime, QTimer
  5. class DateTimeEditDemo(QWidget):
  6.     def __init__(self):
  7.         super(DateTimeEditDemo, self).__init__()
  8.         self.initUI()
  9.     def initUI(self):
  10.         self.setWindowTitle('QDateTimeEdit例子')
  11.         self.resize(300, 90)
  12.         vlayout = QVBoxLayout()
  13.         self.mydateTimeEdit = QDateTimeEdit(QDateTime.currentDateTime(), self)
  14.         self.mydateTimeEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
  15.         vlayout.addWidget(self.mydateTimeEdit)
  16.         self.setLayout(vlayout)
  17.         timer = QTimer(self)
  18.         timer.timeout.connect(self.updateDateTime)
  19.         timer.start(1000)
  20.     def updateDateTime(self):
  21.         currentDateTime = QDateTime.currentDateTime()
  22.         self.mydateTimeEdit.setDateTime(currentDateTime)
  23. if __name__ == '__main__':
  24.     app = QApplication(sys.argv)
  25.     demo = DateTimeEditDemo()
  26.     demo.show()
  27.     sys.exit(app.exec_())
复制代码

在这个示例中,定时器每隔1秒钟触发一次,调用 self.updateDateTime 方法来更新 mydateTimeEdit 的值。这样就能实现当北京时间发生变化时,自动更新时间编辑控件的值。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-12 20:15:42 | 显示全部楼层    本楼为最佳答案   
要实现当北京时间发生变化时自动更新 mydateTimeEdit 里的值,可以使用 QTimer 定时器来定期更新。

首先,在 DateTimeEditDemo 类的 initUI 方法中,创建一个定时器对象,并连接到一个槽方法上。例如,我们可以创建一个名为 updateDateTime 的槽方法:
  1. def initUI(self):
  2.     # 其他代码...
  3.     timer = QTimer(self)
  4.     timer.timeout.connect(self.updateDateTime)
  5.     timer.start(1000)  # 设置定时器间隔为1秒
  6. def updateDateTime(self):
  7.     # 使用北京时间更新 QDateTimeEdit 的值
  8.     currentDateTime = QDateTime.currentDateTime()
  9.     mydateTimeEdit.setDateTime(currentDateTime)
复制代码

updateDateTime 方法中,我们通过调用 QDateTime.currentDateTime() 获取当前的北京时间,然后使用 setDateTime 方法将其设置给 mydateTimeEdit 控件。

最后,记得将 mydateTimeEdit 声明为 self.mydateTimeEdit,以便在其他方法中可以访问它。

完整代码示例如下:
  1. import sys
  2. from PyQt5.QtGui import *
  3. from PyQt5.QtWidgets import *
  4. from PyQt5.QtCore import QDate, QDateTime, QTime, QTimer
  5. class DateTimeEditDemo(QWidget):
  6.     def __init__(self):
  7.         super(DateTimeEditDemo, self).__init__()
  8.         self.initUI()
  9.     def initUI(self):
  10.         self.setWindowTitle('QDateTimeEdit例子')
  11.         self.resize(300, 90)
  12.         vlayout = QVBoxLayout()
  13.         self.mydateTimeEdit = QDateTimeEdit(QDateTime.currentDateTime(), self)
  14.         self.mydateTimeEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
  15.         vlayout.addWidget(self.mydateTimeEdit)
  16.         self.setLayout(vlayout)
  17.         timer = QTimer(self)
  18.         timer.timeout.connect(self.updateDateTime)
  19.         timer.start(1000)
  20.     def updateDateTime(self):
  21.         currentDateTime = QDateTime.currentDateTime()
  22.         self.mydateTimeEdit.setDateTime(currentDateTime)
  23. if __name__ == '__main__':
  24.     app = QApplication(sys.argv)
  25.     demo = DateTimeEditDemo()
  26.     demo.show()
  27.     sys.exit(app.exec_())
复制代码

在这个示例中,定时器每隔1秒钟触发一次,调用 self.updateDateTime 方法来更新 mydateTimeEdit 的值。这样就能实现当北京时间发生变化时,自动更新时间编辑控件的值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-12 20:17:09 | 显示全部楼层
你可以通过定时器 QTimer 来实现, QTimer 可以定期执行一个特定的操作。你可以设置一个定时器,让它每秒钟都更新 mydateTimeEdit 的时间为当前的时间。

下面是改进的代码:

  1. import sys
  2. from PyQt5.QtGui import *
  3. from PyQt5.QtWidgets import *
  4. from PyQt5.QtCore import QDate, QDateTime, QTime, QTimer

  5. class DateTimeEditDemo(QWidget):
  6.     def __init__(self):
  7.         super(DateTimeEditDemo, self).__init__()
  8.         self.initUI()

  9.     def initUI(self):
  10.         # 设置窗口的标题与初始大小
  11.         self.setWindowTitle('QDateTimeEdit例子')
  12.         self.resize(300, 90)

  13.         # 垂直布局
  14.         vlayout = QVBoxLayout()

  15.         # 实例化编辑时间日期的控件
  16.         self.mydateTimeEdit = QDateTimeEdit(QDateTime.currentDateTime(), self)
  17.         self.mydateTimeEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")

  18.         # 创建定时器
  19.         self.timer = QTimer(self)
  20.         self.timer.timeout.connect(self.updateTime)
  21.         # 设置定时器每1000ms(1s)触发一次
  22.         self.timer.start(1000)

  23.         # 布局控件添加,设置主窗口的布局
  24.         vlayout.addWidget(self.mydateTimeEdit)
  25.         self.setLayout(vlayout)

  26.     # 更新时间的方法
  27.     def updateTime(self):
  28.         self.mydateTimeEdit.setDateTime(QDateTime.currentDateTime())

  29. if __name__ == '__main__':
  30.     app = QApplication(sys.argv)
  31.     demo = DateTimeEditDemo()
  32.     demo.show()
  33.     sys.exit(app.exec_())
复制代码


在这个代码中,我首先创建了一个 QTimer 对象。我设置这个定时器每1000毫秒(即一秒)就触发一次 timeout 信号。然后,我将这个信号连接到一个自定义的方法 updateTime 。在 updateTime 方法中,我将 mydateTimeEdit 的日期时间设置为当前日期时间,从而实现了你想要的功能。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-12 20:20:29 | 显示全部楼层
isdkz 发表于 2023-7-12 20:17
你可以通过定时器 QTimer 来实现, QTimer 可以定期执行一个特定的操作。你可以设置一个定时器,让它每秒钟 ...

谢谢你的答复!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-12 20:24:07 | 显示全部楼层
陶远航 发表于 2023-7-12 20:15
要实现当北京时间发生变化时自动更新 mydateTimeEdit 里的值,可以使用 QTimer 定时器来定期更新。

首先, ...

谢谢你的答复!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 17:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表