MSDN_tang 2018-04-10 16:31 采纳率: 100%
浏览 1076
已采纳

请教一些关于pyqt5的小白问题

如下代码所示,我想在一个Dialog的Qwidget里绘制一个矩形,但在发送信号调用DrawRec的时候并没有绘制出图形,但是把DrawRec放在paintEvent里就能绘制出来,难道Qwidget只能在paintEvent里绘制图形?还是因为我没能正确调用呢?

 import sys
from PyQt5.QtCore import pyqtSlot, pyqtSignal
from PyQt5.QtWidgets import QApplication, QDialog,QWidget, QVBoxLayout
from PyQt5.QtGui import QPainter, QColor, QBrush, QPen, QPalette


class myWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.setBackgroundRole(QPalette.Midlight)
        self.setAutoFillBackground(True)

    def paintEvent(self, e):
        # self.DrawRec(10, 10, 50, 50)
        pass

    @pyqtSlot(int, int, int, int)       # 定义槽函数
    def DrawRec(self, x1, y1, x2, y2):
        qp = QPainter()
        qp.begin(self)
        col = QColor(0, 0, 0)
        col.setNamedColor('#d4d4d4')
        qp.setPen(col)
        qp.setBrush(QColor(200, 0, 0))
        qp.drawRect(x1, y1, x2, y2)
        qp.end()


class Dialog(QDialog):

    _signal = pyqtSignal(int, int, int, int)    # 定义信号

    def __init__(self, parent=None):

        super(Dialog, self).__init__(parent)
        self.setObjectName("Dialog")
        self.resize(400, 300)
        self.setSizeGripEnabled(True)

        wigglyWidget = myWidget()
        layout = QVBoxLayout()
        layout.addWidget(wigglyWidget)
        self.setLayout(layout)


        self._signal.connect(wigglyWidget.DrawRec)      # connect
        self._signal.emit(20, 20, 50, 50)        # 信号发送


if __name__ == "__main__":
    app = QApplication(sys.argv)
    dlg = Dialog()
    dlg.show()
    sys.exit(app.exec_())
  • 写回答

1条回答

  • guyanju 2018-04-11 09:28
    关注

    虽然没用过pyqt5,但代码都是通的,画图当然要在paintevent中处理了。写在构造函数中显然是不行的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Matlab问题解答有两个问题
  • ¥50 Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。
  • ¥15 stm32的can接口不能收发数据
  • ¥15 目标检测算法移植到arm开发板
  • ¥15 利用JD51设计温度报警系统
  • ¥15 快手联盟怎么快速的跑出建立模型