python - 如何在另一个函数中使用在 QDateEdit 小部件中设置的用户值?
问题描述
我正在使用 PyQT5 为我运行的一些需要用户日期输入的脚本构建一个 GUI。
我已经设法达到可以使用 DateEdit 范围选择日期的地步,并且每次用户更改它时都会将新日期打印到控制台。
当我单击“运行”按钮时,我需要做的是使用函数中 QDateEdit 小部件中的任何日期。
这是我的示例代码
import sys
from PyQt5 import QtGui
from PyQt5.QtCore import Qt, QDate
from PyQt5.QtWidgets import (QApplication, QCheckBox, QGridLayout, QGroupBox,
QMenu, QPushButton, QRadioButton, QVBoxLayout, QWidget, QFrame, QDateEdit)
class Window(QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.setWindowIcon(QtGui.QIcon('logo.png'))
self.setWindowTitle("Test")
self.resize(400, 300)
grid = QGridLayout()
grid.addWidget(self.group1(), 0, 0)
self.setLayout(grid)
def group1(self):
groupBox = QGroupBox("Box 1")
date = QDate.currentDate().addDays(-1)
dateSelect = QDateEdit()
dateSelect.setDate(date)
dateSelect.dateChanged.connect(self.onDateChanged)
checkbox1 = QCheckBox("Task 1")
checkbox2 = QCheckBox("Task 2")
checkbox3 = QCheckBox("Task 3")
button1 = QPushButton('Run')
button1.setMaximumWidth(75)
button1.clicked.connect(self.btn1_onClicked)
button2 = QPushButton('Run')
button2.setMaximumWidth(75)
separatorLine = QFrame()
separatorLine.setFrameShape(QFrame.HLine)
separatorLine.setFrameShadow(QFrame.Sunken)
vbox = QVBoxLayout()
vbox.addWidget(dateSelect)
vbox.addWidget(checkbox1)
vbox.addWidget(checkbox2)
vbox.addWidget(button1)
vbox.addWidget(separatorLine)
vbox.addWidget(checkbox3)
vbox.addWidget(button2)
vbox.addStretch(1)
groupBox.setLayout(vbox)
return groupBox
def btn1_onClicked(self, ):
date = onDateChanged()
def onDateChanged(self,newDate):
date = newDate.toString('yyyy-MM-dd')
print(date)
return date
if __name__ == '__main__':
app = QApplication(sys.argv)
clock = Window()
clock.show()
sys.exit(app.exec_())
解决方案
QDateEdit
通过信号通知日期更改dateChanged
,但在您的情况下,您不需要通知,而是当前日期,为此您必须使用该date()
方法。
import sys
from PyQt5.QtCore import Qt, QDate
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import (
QApplication,
QCheckBox,
QGridLayout,
QGroupBox,
QPushButton,
QVBoxLayout,
QWidget,
QFrame,
QDateEdit,
)
class Window(QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.setWindowIcon(QIcon("logo.png"))
self.setWindowTitle("Test")
self.resize(400, 300)
grid = QGridLayout(self)
grid.addWidget(self.group1(), 0, 0)
def group1(self):
groupBox = QGroupBox("Box 1")
date = QDate.currentDate().addDays(-1)
self.dateSelect = QDateEdit()
self.dateSelect.setDate(date)
self.dateSelect.dateChanged.connect(self.onDateChanged)
checkbox1 = QCheckBox("Task 1")
checkbox2 = QCheckBox("Task 2")
checkbox3 = QCheckBox("Task 3")
button1 = QPushButton("Run")
button1.setMaximumWidth(75)
button1.clicked.connect(self.btn1_onClicked)
button2 = QPushButton("Run")
button2.setMaximumWidth(75)
separatorLine = QFrame(frameShape=QFrame.HLine, frameShadow=QFrame.Sunken)
vbox = QVBoxLayout()
vbox.addWidget(self.dateSelect)
vbox.addWidget(checkbox1)
vbox.addWidget(checkbox2)
vbox.addWidget(button1)
vbox.addWidget(separatorLine)
vbox.addWidget(checkbox3)
vbox.addWidget(button2)
vbox.addStretch(1)
groupBox.setLayout(vbox)
return groupBox
def btn1_onClicked(self,):
print(self.dateSelect.date().toString("yyyy-MM-dd"))
def onDateChanged(self, newDate):
date = newDate.toString("yyyy-MM-dd")
print(date)
if __name__ == "__main__":
app = QApplication(sys.argv)
clock = Window()
clock.show()
sys.exit(app.exec_())
推荐阅读
- database - 颜色的首选数据类型
- aws-iot - 是否可以将 AWS IoT 分析数据存储数据实时提取到数据集中?
- elasticsearch - Elasticsearch 索引红色状态
- python - 自定义模块的 Python ModuleNotFoundError
- c# - 如何在 C# Revit API 中找到面向东南、西南、东北、西北的外墙
- javascript - 无法在 chrome 中找到 OTPCredential
- java - 如何从tsendmail组件talend中的tlogrow获取表格结果(多行)
- powerbi - Power BI-查询编辑
- python - 在 TensorFlow 中设置 Adam 优化器
- sql-server - 将 xml 传递给链接服务器上的存储过程