将字符串传递给函数时遇到麻烦

时间:2019-08-28 18:37:54

标签: python pyqt5

我正在使用pyqt5为我的python文件创建一个小型GUI(希望以后可以将其转换为.exe文件)。 我创建了一个非常简单的GUI,用户可以在其中选择一个日期,然后单击一个按钮,该按钮将运行传递所选日期的功能。 但是,我似乎无法使它正常工作-我敢肯定有一个简单的修复程序,但我的谷歌搜索似乎没有用。

这是我目前的代码:

#MainWindow
class GUI(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setup()

    def setup(self):
        # window settings
        self.setWindowTitle('Create scheule')
        self.resize(505, 556)

        # Date select settings
        calendarWidget = QtWidgets.QCalendarWidget(self)
        calendarWidget.setGeometry(QtCore.QRect(50, 160, 392, 236))        
        calendarWidget.clicked[QtCore.QDate].connect(self.showDate)

        self.lbl = QLabel(self)
        date = calendarWidget.selectedDate()
        self.lbl.setText(date.toString("MM/dd/yyyy"))
        self.lbl.move(20, 20)

        # create schedule button settings
        cleaned_date = date.toString("MM/dd/yyyy")
        Create_schedule = QtWidgets.QPushButton('Create schedule',self)
        Create_schedule.setGeometry(QtCore.QRect(120, 460, 261, 61))        
        Create_schedule.clicked.connect(self.create_schedule)


    def showDate(self, date):
        self.lbl.setText(date.toString("MM/dd/yyyy"))
        cleaned_date = date.toString("MM/dd/yyyy")
        print(cleaned_date)

    def create_schedule(self, cleaned_date):

        print(cleaned_date)
        creating_schedules(cleaned_date)

        print('created it :D')

if __name__ == '__main__':
    app = QApplication(sys.argv)

    gui = GUI()
    gui.show()

    sys.exit(app.exec_())

GUI会打开并选择日期(我使用showDate函数检查它是否以所需的格式创建了字符串)。但是,当我运行该函数:我从另一个文件导入的creation_schedules(cleaned_date)时,它将尝试运行该函数,但是正在传递的“ cleaned_date”值是布尔值:False。我希望传递的字符串与设置中创建的字符串相同-我不确定为什么要将字符串更改为False。

我还尝试将cleaned_date移到create_schedule中,但这出现了相同的错误。

非常感谢您的帮助,谢谢!

3 个答案:

答案 0 :(得分:2)

您必须从根本上改变两件事:

   # Date select settings
        calendarWidget = QtWidgets.QCalendarWidget(self)
        calendarWidget.setGeometry(QtCore.QRect(50, 160, 392, 236))
        calendarWidget.clicked[QtCore.QDate].connect(self.showDate)
        ########## CHANGE HERE!
        self.calendar_widget = calendarWidget # this line is new

 def create_schedule(self, cleaned_date):
        cleaned_date = self.calendar_widget.selectedDate().toString("MM/dd/yyyy")
        print(cleaned_date)
        #creating_schedules(cleaned_date)

        print('created it :D')

问题是您的按钮不知道日历小部件。因此,它不会将日历的值传递给函数create_schedule。

答案 1 :(得分:0)

在设置方法的顶部添加此行

self.cleaned_date = ''

,您可以添加

self.cleaned_date = date.toString("MM/dd/yyyy")

分配日期后的这一行。

然后像这样引用它:

def create_schedule(self):

    print(cleaned_date)
    creating_schedules(self.cleaned_date)

    print('created it :D')

我通常在PyQt5中将变量设置为类变量。我不知道有什么更好的方法来实现这一目标,如果有人这样做的话,请纠正我。

答案 2 :(得分:0)

尝试一下:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore    import *
from PyQt5.QtGui     import *
from PyQt5.QtWidgets import *


class GUI(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setup()

    def setup(self):
        # window settings
        self.setWindowTitle('Create scheule')
        self.resize(505, 556)

        # Date select settings
        calendarWidget = QtWidgets.QCalendarWidget(self)
        calendarWidget.setGeometry(QtCore.QRect(50, 160, 392, 236))        
        calendarWidget.clicked[QtCore.QDate].connect(self.showDate)

        self.lbl = QLabel(self)
        date = calendarWidget.selectedDate()
        self.lbl.setText(date.toString("MM/dd/yyyy"))
        self.lbl.move(20, 20)

        # create schedule button settings
        self.cleaned_date = date.toString("MM/dd/yyyy")                  # + self.
        Create_schedule = QtWidgets.QPushButton('Create schedule',self)
        Create_schedule.setGeometry(QtCore.QRect(120, 460, 261, 61))        
        Create_schedule.clicked.connect(self.create_schedule)


    def showDate(self, date):
        self.lbl.setText(date.toString("MM/dd/yyyy"))
        self.cleaned_date = date.toString("MM/dd/yyyy")                  # + self.
        print(self.cleaned_date)                                         # + self.

#    def create_schedule(self, cleaned_date):
    def create_schedule(self):

        print(self.cleaned_date)                                         # + self.
#        creating_schedules(cleaned_date)

        print('created it :D')

if __name__ == '__main__':
    app = QApplication(sys.argv)

    gui = GUI()
    gui.show()

    sys.exit(app.exec_())

enter image description here