PYQT5 自定义QWidget并重写paintEvent

参考
http://www.cnblogs.com/findum...
https://blog.csdn.net/goforwa...
关键词
PYQT5
QWidget
paintEvent
QSS

个人没有C的基础, 鉴于网上教程全是c类的, 特写下次文, 能帮到和我有相同困惑的人就好.

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.qss

#myWidget{
    background: gold;
    border-radius: 8px ;
    border: 1px solid red; /* 顺序不能变 */
}
### 回答1: 要使用 PyQt5 自定义一个组件并将其放在界面上,需要进行以下步骤: 1. 创建一个继承自 QWidget自定义组件类。 2. 在该类中重写 paintEvent() 函数,在其中绘制自定义的图形。 3. 在主窗口中创建该组件的实例。 4. 使用布局管理器将该组件放在界面上。 示例代码: ```python from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter, QColor from PyQt5.QtCore import Qt import sys class CustomWidget(QWidget): def paintEvent(self, event): painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.setBrush(QColor(255, 0, 0)) painter.drawRect(0, 0, self.width()-1, self.height()-1) if __name__ == '__main__': app = QApplication(sys.argv) w = CustomWidget() w.show() sys.exit(app.exec_()) ``` 这是一个简单的例子,在这个例子中,我们继承了 QWidget 类创建了一个名为 CustomWidget自定义组件类。在 paintEvent() 函数中绘制了一个红色矩形。最后在主函数中创建了一个 CustomWidget 的实例并在屏幕上显示。 ### 回答2: 要自定义一个组件并将其放在界面上,首先需要创建一个继承自QWidget或QFrame的类。然后,在这个类中重写绘制函数paintEvent,用来绘制自定义的组件样式。 下面是一个简单的示例: ```python from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QLabel from PyQt5.QtGui import QPainter, QColor, QPen from PyQt5.QtCore import Qt class CustomWidget(QWidget): def __init__(self): super().__init__() def paintEvent(self, event): painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) # 设置抗锯齿 # 绘制背景 painter.setPen(Qt.NoPen) painter.setBrush(QColor(255, 255, 255)) painter.drawRect(self.rect()) # 绘制边框 painter.setPen(QPen(Qt.red, 2)) painter.drawRect(10, 10, self.width() - 20, self.height() - 20) # 绘制文本 painter.setPen(QColor(0, 0, 0)) painter.setFont(QFont("Arial", 12)) painter.drawText(self.rect(), Qt.AlignCenter, "Custom Widget") if __name__ == "__main__": app = QApplication([]) widget = QWidget() layout = QVBoxLayout() custom_widget = CustomWidget() layout.addWidget(custom_widget) widget.setLayout(layout) widget.show() app.exec_() ``` 在上述示例中,自定义的组件CustomWidget继承自QWidget重写paintEvent函数,并在其中绘制了一个包含红色边框和文本的矩形。然后,将CustomWidget添加到一个QVBoxLayout布局中,并将该布局设置为widget的主布局。最后,通过widget.show()显示界面,并通过app.exec_()进入事件循环,让应用程序保持运行。 通过以上步骤,我们成功自定义了一个组件并将其放在了界面上。可以根据具体需求对CustomWidget的样式和功能进行进一步的扩展和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值