我创建了一个 GUI 来通过 PyQt QCalendarWidget 显示一些正在运行的锻炼。以下代码基于这些帖子:
我创建了一个子类来覆盖paint方法。当我在 paintCell 方法中硬编码日期时,这可以正常工作。但理想情况下,我想先运行一个函数,它将一组日期/运行距离作为数据框返回。然后,该数据框将用于“填充” QCalendarWidget(例如,通过将运行距离添加为相应日期的文本)。
class MyQtApp(trigui.Ui_MainWindow, QtWidgets.QMainWindow):
def __init__(self):
super(MyQtApp, self).__init__()
self.setupUi(self)
self.Calendar()
self.df = pd.DataFrame()
self.qPlan_Create_btn.clicked.connect(self.draw_running_plan)
def Calendar(self):
self.cal = CalendarWidget(self.qPlan_Widget)
self.cal.resize(1700, 800)
def draw_running_plan(self):
self.df = pd.DataFrame([[25-05-2021, 10], [27-05-2021, 12]], columns=['Date', 'Distance'])
#########
# how can I pass this dataframe to the paintCell
class CalendarWidget(QtWidgets.QCalendarWidget):
def paintCell(self, painter, rect, date):
painter.setRenderHint(QtGui.QPainter.Antialiasing, True)
if date == QtCore.QDate(2021, 5, 15):
painter.save()
painter.drawRect(rect)
painter.setPen(QtGui.QColor(168, 34, 3))
painter.drawText(rect, QtCore.Qt.AlignHCenter, 'Hello\nWorld')
painter.drawText(QtCore.QRectF(rect),
QtCore.Qt.TextSingleLine|QtCore.Qt.AlignCenter, str(date.day()))
painter.restore()
else:
QtWidgets.QCalendarWidget.paintCell(self, painter, rect, date)
def main():
import sys
app = QtWidgets.QApplication(sys.argv)
qt_app = MyQtApp()
qt_app.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
不知何故,我需要从我的__init__
. 我试图在我的函数 draw_running_plan 中设置 self.cal = CalendarWidget (self.qPlan_Widget) 但是日历没有显示。对于信息,self.qPlan_Widget 是我通过 QtDesigner 创建的一个简单的 Widget/容器,我通过 Calendar 方法将其初始化为 CalendarWidget。长话短说:初始化 CalendarWidget 后,如何使用中间函数的结果更新它?
编辑:我关于标签的错误是 PySide2 而不是 PyQt