簡體   English   中英

如何在另一個函數中使用在 QDateEdit 小部件中設置的用戶值?

[英]How do I use the user value set in the in QDateEdit widget in another function?

我正在使用 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_())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM