我正在玩PyQt5(我刚开始学习它)。
我正在尝试创建一个窗口/布局,带有两个输入框(输入'start'和'end'日期),这样当单击每个时,触发QCalendarWidget
弹出,当用户选择日期时,日期将输入QLineEdit
字段。
到目前为止,它只是显示一个空白窗口,但我不确定我做错了什么。
class selectedDate(QWidget):
def __init__(self):
super(selectedDate, self).__init__()
self.layout = QVBoxLayout(self)
self.selection = QLineEdit("Click to Enter Date", self)
self.layout.addWidget(self.selection)
self.layout.addWidget(self.selection)
self.selection.installEventFilter(self)
def mousePressEvent(self, e):
self.myCal()
super(selectedDate, self).mousePressEvent(e)
def eventFilter(self, object, e):
if self.layout.indexOf(object) != -1:
if e.type() == e.MouseButtonPress:
pass
return super(selectedDate, self).eventFilter(object, e)
def myCal(self):
self.cal = QCalendarWidget(self)
self.cal.setGridVisible(True)
self.cal.move(10, 20)
self.cal.clicked[QDate].connect(self.showDate)
self.date = self.cal.selectedDate()
self.selection.setText(self.date.toString())
self.setGeometry(300, 300, 415, 350)
self.setWindowTitle('Calendar')
self.show()
def showDate(self, date):
self.selection.setText(date.toString())
app = QApplication(sys.argv)
top = selectedDate()
app.exec_()
答案 0 :(得分:1)
有很多问题,让我们解决一些问题。
要查看窗口,您需要拨打QWidget.show()
。您只能在self.show()
方法中调用myCal
。但myCal
仅在鼠标单击时调用。当然,您希望在启动应用程序后立即显示窗口。要做到这一点,您只需将self.show()
放在__init__
方法的末尾。
class SelectedDate(QWidget):
def __init__(self):
# layout stuff, QLineEdit, etc
self.show() # show your first window with the QLineEdit
接下来,鼠标按下事件。方法mousePressEvent
实际上从未被调用过!您可以通过在其中添加print语句来检查它。
当检测到MouseButtonPress
时(eventFilter
)
最后是日历小部件。我们想在新窗口中打开它(QCalendarWidget
默认情况下不会弹出,你需要自己动手)。
def myCal(self):
self.cal = QCalendarWidget(self)
self.cal.setGridVisible(True)
self.cal.clicked[QDate].connect(self.showDate)
# create a new window that contains the calendar
self.calendarWindow = QWidget()
hbox = QHBoxLayout()
hbox.addWidget(self.cal)
self.calendarWindow.setLayout(hbox)
self.calendarWindow.setGeometry(300, 300, 415, 350)
self.calendarWindow.setWindowTitle('Calendar')
# open this new window
self.calendarWindow.show()
现在提出更多建议。您应该从一个简单的应用程序开始,并在它工作时构建更多功能。只为空白窗口编写大量代码不是一个好主意!因此,如果您再次执行此操作,请按步骤操作:
QLineEdit
的窗口(编写代码,测试它有效)QLineEdit
QLineEdit
文本(顺便提一下代码是好的)此外,您可以使用更好的变量名称,一些建议:
selectedDate
- > SelectDateWidget
selection
- > date_selection
mousePressEvent
- > on_date_selection_clicked
myCal
- > open_calendar
cal
- > calendar
showDate
- > on_calendar_clicked
或update_date_selection_text