我正在使用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中,但这出现了相同的错误。
非常感谢您的帮助,谢谢!
答案 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_())