2016-05-07 6 views
0

QStyleのオプションを使用する独自のウィジェットを作成して、 "ネイティブ"な外観と感じを持たせようとしています。 ステップ1は、私はそのように達成しようとしたシンプルなFocusRectを、描画されます:QStylePainterでFocusRectをペイントする

import sys 

from PyQt5 import QtWidgets, QtGui 


class MyWidget(QtWidgets.QWidget): 
    def __init__(self, parent=None): 
     super().__init__(parent) 

    def paintEvent(self, event): 
     painter = QtWidgets.QStylePainter(self) 
     option = QtWidgets.QStyleOptionFocusRect() 
     option.initFrom(self) 
     option.backgroundColor = self.palette().color(QtGui.QPalette.Background) 
     painter.drawPrimitive(QtWidgets.QStyle.PE_FrameFocusRect, option) 


if __name__ == '__main__': 
    qApp = QtWidgets.QApplication(sys.argv) 
    qApp.setStyle('fusion') 

    window = QtWidgets.QMainWindow() 

    window.widget = MyWidget(window) 
    window.widget.resize(100, 100) 
    window.widget.move(50, 50) 

    window.setFixedSize(200, 200) 
    window.show() 

    sys.exit(qApp.exec_()) 

は、残念ながら、これは私だけの空のウィンドウを提供します。私は何が欠けていますか?

答えて

1

FrameFocusRectは、実際にフォーカスが当てられている場合にのみ描画されることが分かります。

paintEventメソッドにoption.state |= QtWidgets.QStyle.State_KeyboardFocusChangeを追加することで問題が解決されます。

関連する問題