読者です 読者をやめる 読者になる 読者になる

ウィジェットを偽造する

QStyleと、QStyleOptionのサブクラスを使うと、ウィジェットの表示を再現できます。
QStyleはQApplication.style()で取得。
QStyleOptionは、ウィジェット型ごとにサブクラスが違います。

大量のウィジェットを実際に作ってしまうと遅くなるとき、などに使えそうです。

#encoding:shift-jis
from __future__ import division, with_statement, print_function
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class Spam(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        
        chk = QCheckBox()
        chk.setText(u"どうだ、押せまい!ふはははは!!")
        
        self.option = QStyleOptionButton()
        self.option.state = QStyle.State_Enabled;
        self.option.direction = QApplication.layoutDirection()
        self.option.rect = QRect(QPoint(0, 0), chk.sizeHint())
        self.option.fontMetrics = QApplication.fontMetrics()
        self.option.text = chk.text()
    
    def paintEvent(self, evt):
        painter = QPainter(self)
        QApplication.style().drawControl(QStyle.CE_CheckBox, self.option, painter)
        painter.end()
        
def main():
    app = QApplication([])
    w = Spam()
    w.setFixedSize(300, 300)
    w.show()
    
    app.exec_()
    
if __name__ == "__main__":
    main()
広告を非表示にする