PYQT5 自定義QWidget並重寫paintEvent

參考
http://www.cnblogs.com/findum...
https://blog.csdn.net/goforwa...
關鍵詞
PYQT5
QWidget
paintEvent
QSS

我的沒有C的基礎, 鑑於網上教程全是c類的, 特寫下次文, 能幫到和我有相同困惑的人就好.html

from PyQt5.QtGui import QPainter
from PyQt5.QtWidgets import QApplication, QWidget, \
    QHBoxLayout, QStyleOption, QStyle

class MyWidget(QWidget):
    def __init__(self, parent=None):
        super(MyWidget,self).__init__(parent)
        self.setObjectName('myWidget')
        self.setMinimumSize(100,60)

    # 重寫paintEvent 不然不能使用樣式表定義外觀
    def paintEvent(self, evt):
        opt = QStyleOption()
        opt.initFrom(self)
        painter = QPainter(self)
        # 反鋸齒
        painter.setRenderHint(QPainter.Antialiasing)
        self.style().drawPrimitive(QStyle.PE_Widget, opt, painter, self)

class MyWindow(QWidget):
    def __init__(self, parent=None):
        super(MyWindow,self).__init__(parent)
        self.resize(400,300)
        layout = QHBoxLayout()

        # 添加自定義部件(MyWidget)
        self.widget = MyWidget() # 這裏能夠不要self

        # 放入佈局內
        layout.addWidget(self.widget)
        self.setLayout(layout)

        self.setWindowTitle('使用QSS自定義QWidget樣式')

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    app.setStyleSheet(open("./Style.qss").read())
    window = MyWindow()
    window.show();
    sys.exit(app.exec_())

Style.qssapp

#myWidget{
    background: gold;
    border-radius: 8px ;
    border: 1px solid red; /* 順序不能變 */
}
相關文章
相關標籤/搜索