关于pyqt5的一些小白的问题

MSDN_tang 2018-04-11 12:19:19

如下代码所示,我想在一个Dialog的Qwidget里绘制一个矩形,但在第48行发送信号调用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_())


...全文
2275 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
MSDN_tang 2018-04-13
  • 打赏
  • 举报
回复
引用 1 楼 qq_34053126 的回复:
Qt绘制, 必须在paintEvent中。
但是printEvent是窗口初始化的时候自动执行的,如果我想用button触发绘图的话该怎样实现呢
MSDN_tang 2018-04-13
  • 打赏
  • 举报
回复
但是printEvent是窗口初始化的时候自动执行的,如果我想用button触发绘图的话该怎样实现呢
qq_34053126 2018-04-11
  • 打赏
  • 举报
回复
Qt绘制, 必须在paintEvent中。

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧