QLabel

2017-09-04 21 views
1

내부 QPainter를하는 방법 나는 QLabel 내부 그리기)합니다 (QPainter를 만드는 방법을 이해할 수 없다, 여기에 내가 일을했을 말했다 코드입니다 :QLabel

import sys 
from PyQt5.QtWidgets import * 
from PyQt5.QtGui import QPainter, QColor, QBrush 

class Labella(QLabel): 

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

     lb = QLabel('text', parent) 
     lb.setStyleSheet('QFrame {background-color:grey;}') 
     lb.resize(200, 200) 

     qp = QPainter(lb) 
     qp.begin(lb); 

     qp.setBrush(QColor(200, 0, 0)) 
     qp.drawRect(0,0,20,20); 
     qp.end(); 


    def paintEvent(self, e): 
     qp = QPainter() 
     qp.begin(self) 
     self.drawRectangles(qp) 
     qp.end() 

    def drawRectangles(self, qp): 

     col = QColor(0, 0, 0) 
     col.setNamedColor('#040404') 
     qp.setPen(col) 

     qp.setBrush(QColor(200, 0, 0)) 
     qp.drawRect(10, 15, 200, 60) 


class Example(QWidget): 

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

     lb = Labella(self) 

     self.setGeometry(300, 300, 350, 300) 
     self.setWindowTitle('Colours') 
     self.show() 


if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 

난 단지 C에서 예를 찾을 수는 ++와 같은 Qt 문서는 여기에 없으면 정보를 찾아야하는 위치를 알려주십시오.

답변

2

documentationpaintEvent 안에 QPainter을 사용할 것을 제안합니다.

방법 paintEvent 내부, 아래와 같이 생성자를 사용하여 필요 begin() 방법을 문의하고 end()

save()restore() 할 수있는 방법을 (클래스 Labella은 부모를 초기화 매개 변수를 그리워) 설정을 복원하기 전에 뭔가 다른 것을 그릴 수 있도록 QPainter의 표준 구성을 저장하는 것이 편리 할 수 ​​있습니다.

import sys 
from PyQt5.QtWidgets import * 
from PyQt5.QtGui import QPainter, QColor, QBrush 

class Labella(QLabel): 

    def __init__(self, parent): 
     super().__init__(parent=parent) 

     self.setStyleSheet('QFrame {background-color:grey;}') 
     self.resize(200, 200) 

    def paintEvent(self, e): 
     qp = QPainter(self) 
     self.drawRectangles(qp) 
     qp.setBrush(QColor(200, 0, 0)) 
     qp.drawRect(0,0,20,20) 

    def drawRectangles(self, qp):  
     qp.setBrush(QColor(255, 0, 0, 100)) 
     qp.save() # save the QPainter config 

     qp.drawRect(10, 15, 20, 20) 

     qp.setBrush(QColor(0, 0, 255, 100)) 
     qp.drawRect(50, 15, 20, 20) 

     qp.restore() # restore the QPainter config    
     qp.drawRect(100, 15, 20, 20) 

class Example(QWidget): 

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

     lb = Labella(self) 

     self.setGeometry(300, 300, 350, 300) 
     self.setWindowTitle('Colours') 
     self.show() 

if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 
+0

감사합니다. 그러나이 설정으로 setText()를 작동시킬 수 있습니까? Painter가 켜져있을 때 레이블에 텍스트가 나타나지 않는 것 같습니다. – user3755529

+1

@ user3755529 맞습니다. 죄송합니다. 먼저이 부분을 이해하지 못했습니다.이 문제를 설명하기 위해 파헤칩니다. 레이블의 배경을 다시 그리는 것이 주 목적입니까? – PRMoureu

+0

QLabel에 HTML 표 하위 ​​집합이 있습니다 (QVBoxLayout에 배치 할 레이블이 많이있을 것입니다). 표 아래에 캔버스를 추가하여 QLabel이 식별하는 금융 상품의 52 주 가격 범위에있는 지점을 나타내는 막대를 그립니다. – user3755529