QLabel

2017-09-04 8 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

関連する問題