QCalendarWidget渲染小

时间:2019-09-10 16:11:34

标签: python pyqt pyqt5

我正在尝试使用QCalendarWidget,但未按预期在用户界面中呈现。我看到的示例显示了一个类似于对象的日历选择器,但是在我的情况下,我得到了一个很小的字段渲染。这是用户界面中的样子:

here

这是我第一次使用它,所以我不确定是否缺少步骤。关于我可能做错了什么的任何想法?这是正在使用的完整代码:

from PyQt5.QtWidgets import QMainWindow, QCalendarWidget, QLabel
from PyQt5 import QtCore, QtWidgets, QtGui


import sys

class Example(QMainWindow):

   def __init__(self):
      super(Example, self).__init__()

      self.initUI()

   def initUI(self):

      cal = QCalendarWidget(self)
      cal.setGridVisible(True)
      cal.move(20, 20)
      cal.clicked[QtCore.QDate].connect(self.showDate)

      self.lbl = QLabel(self)
      date = cal.selectedDate()
      self.lbl.setText(date.toString())
      self.lbl.move(20, 200)

      self.setGeometry(100,100,300,300)
      self.setWindowTitle('Calendar')
      self.show()

   def showDate(self, date):

      self.lbl.setText(date.toString())

def main():

    app = QtWidgets.QApplication(sys.argv)
    mainWin = Example()
    mainWin.show()
    sys.exit( app.exec_() )

if __name__ == '__main__':
   main()

1 个答案:

答案 0 :(得分:2)

在QMainWindow的centralWidget中使用布局,例如QVBoxLayout:

import sys

from PyQt5 import QtCore, QtGui, QtWidgets 


class Example(QtWidgets.QMainWindow):
    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

        cal = QtWidgets.QCalendarWidget(gridVisible=True)
        cal.clicked.connect(self.showDate)

        self.lbl = QtWidgets.QLabel()
        date = cal.selectedDate()
        self.lbl.setText(date.toString())

        central_widget = QtWidgets.QWidget()
        self.setCentralWidget(central_widget)
        lay = QtWidgets.QVBoxLayout(central_widget)
        lay.addWidget(cal)
        lay.addWidget(self.lbl)

        self.setGeometry(100, 100, 300, 300)
        self.setWindowTitle("Calendar")

    @QtCore.pyqtSlot(QtCore.QDate)
    def showDate(self, date):
        self.lbl.setText(date.toString())


def main():

    app = QtWidgets.QApplication(sys.argv)
    mainWin = Example()
    mainWin.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

enter image description here