Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我想把文本放在pyqt QCalendarWidget中_Python_Pyqt_Pyqt5 - Fatal编程技术网

Python 我想把文本放在pyqt QCalendarWidget中

Python 我想把文本放在pyqt QCalendarWidget中,python,pyqt,pyqt5,Python,Pyqt,Pyqt5,我想将p.drawText(r.x()+10,r.y()+33,{}/{}.Format('tset1','test2')的文本置于所选QCalendarWidget日期的条件下。但这并不好 import sys from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * class main_window(QWidget): def __init__(self):

我想将
p.drawText(r.x()+10,r.y()+33,{}/{}.Format('tset1','test2')
的文本置于所选
QCalendarWidget
日期的条件下。但这并不好

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

class main_window(QWidget):
    def __init__(self):
        super(main_window, self).__init__()
        self.resize(1280, 900)

        self.Calendar() 

    def Calendar(self):
        self.cal = QCalendarWidget(self)    
        self.cal.resize(500, 500)
        self.cal.clicked.connect(self.Calendar_click)

    def Calendar_click(self):
        p = QPainter()
        r = QRect(0,0,10,10)
        d = self.cal.selectedDate()
        self.cal.paintCell(p, r, d)
        if (d == QDate.currentDate()):      
            f = QFont()
            f.setPixelSize(10)
            f.setBold(True)
            f.setItalic(True)
            p.setFont(f)
            p.drawText(r.x()+10, r.y()+33, '{}/{}'.format('tset1','test2'))

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

我已经尝试了很多,但我仍然不知道如何在所选日期上放置小文本。

您必须覆盖
paintCell()
方法,因为此方法在paintEvent()中调用:

class CalendarWidget(QCalendarWidget):
def paintCell(自身、油漆工、rect、日期):
super(CalendarWidget,self).paintCell(painter,rect,date)
如果日期=self.selectedDate():
保存
f=QFont()
f、 设置像素大小(10)
f、 挫折(真)
f、 设置斜体(真)
painter.setFont(f)
r=rect
绘画文本(
矩形左上角()+QPoint(10,33),
“{}/{}.”格式(“tset1”、“test2”),
)
恢复
类主窗口(QWidget):
定义初始化(自):
超级(主窗口,自我)。\uuuu初始化
自我调整大小(1280900)
self.Calendar()
def日历(自):
self.cal=CalendarWidget(self)
自我校准调整大小(500500)

更新:

如果要保留文本,必须保存日期,并在必要时重新绘制,因为Qt会重新绘制所有内容

class CalendarWidget(QCalendarWidget):
def uuu init uuu(self,parent=None):
超级(CalendarWidget,self)。\uuuuu初始化\uuuuuu(父级)
self.\u selected\u dates=set()
self.\u选择的日期。添加(self.selectedDate())
self.clicked.connect(self.on_clicked)
@pyqtSlot(QDate)
单击时的def(自我,日期):
self.\u所选日期。添加(日期)
def paintCell(自身、油漆工、rect、日期):
super(CalendarWidget,self).paintCell(painter,rect,date)
如果在self.\u中选择日期\u日期:
保存
f=QFont()
f、 设置像素大小(10)
f、 挫折(真)
f、 设置斜体(真)
painter.setFont(f)
r=rect
绘画文本(
矩形左上角()+QPoint(10,33),
“{}/{}.”格式(“tset1”、“test2”),
)
恢复

您必须覆盖
paintCell()
方法,因为此方法在paintEvent()中调用:

class CalendarWidget(QCalendarWidget):
def paintCell(自身、油漆工、rect、日期):
super(CalendarWidget,self).paintCell(painter,rect,date)
如果日期=self.selectedDate():
保存
f=QFont()
f、 设置像素大小(10)
f、 挫折(真)
f、 设置斜体(真)
painter.setFont(f)
r=rect
绘画文本(
矩形左上角()+QPoint(10,33),
“{}/{}.”格式(“tset1”、“test2”),
)
恢复
类主窗口(QWidget):
定义初始化(自):
超级(主窗口,自我)。\uuuu初始化
自我调整大小(1280900)
self.Calendar()
def日历(自):
self.cal=CalendarWidget(self)
自我校准调整大小(500500)

更新:

如果要保留文本,必须保存日期,并在必要时重新绘制,因为Qt会重新绘制所有内容

class CalendarWidget(QCalendarWidget):
def uuu init uuu(self,parent=None):
超级(CalendarWidget,self)。\uuuuu初始化\uuuuuu(父级)
self.\u selected\u dates=set()
self.\u选择的日期。添加(self.selectedDate())
self.clicked.connect(self.on_clicked)
@pyqtSlot(QDate)
单击时的def(自我,日期):
self.\u所选日期。添加(日期)
def paintCell(自身、油漆工、rect、日期):
super(CalendarWidget,self).paintCell(painter,rect,date)
如果在self.\u中选择日期\u日期:
保存
f=QFont()
f、 设置像素大小(10)
f、 挫折(真)
f、 设置斜体(真)
painter.setFont(f)
r=rect
绘画文本(
矩形左上角()+QPoint(10,33),
“{}/{}.”格式(“tset1”、“test2”),
)
恢复

Wow!谢谢。最后,我想保留一条选定的文本,但我该怎么办?@Lee我不明白你的意思,请解释清楚,即使选择了另一个日期,你也希望文本保留吗?是的,如果你选择了另一个日期,这就是保存文本的方式。谢谢:)这很难,但非常有用。哇!非常感谢。最后,我想保留一条选定的文本,但我该怎么办?@Lee我不明白你的意思,请解释清楚,即使选择了另一个日期,你也希望文本保留吗?是的,如果你选择了另一个日期,这就是你保存文本的方式。谢谢:)这很难,但很有帮助。