Как использовать пользовательское значение, заданное в виджете in QDateEdit, в другой функции? - PullRequest
1 голос
/ 19 января 2020

Я создаю GUI, используя PyQT5 для некоторых скриптов, которые я запускаю, и которые требуют ввода даты пользователем.

Мне удалось добраться до точки, где я могу выбрать дату, используя диапазон 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_())

1 Ответ

2 голосов
/ 19 января 2020

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_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...