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

请教一些关于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 jetson nano
  • ¥15 :app:debugCompileClasspath'.
  • ¥15 windows c++内嵌qt出现数据转换问题。
  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问
  • ¥15 用MATLAB汇总拟合图
  • ¥15 智能除草机器人方案设计
  • ¥15 对接wps协作接口实现消息发送
  • ¥15 SQLite 出现“Database is locked” 如何解决?