Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt5:如何单击按钮开始绘制?_Python_Pyqt_Pyqt5_Qwidget_Qpushbutton - Fatal编程技术网

Python PyQt5:如何单击按钮开始绘制?

Python PyQt5:如何单击按钮开始绘制?,python,pyqt,pyqt5,qwidget,qpushbutton,Python,Pyqt,Pyqt5,Qwidget,Qpushbutton,下面的代码生成一个按钮和一个矩形。我想更改它,以便在单击按钮时绘制矩形 from PyQt5.QtWidgets import QWidget, QApplication, QPushButton from PyQt5.QtGui import QPainter, QColor, QBrush import sys class Example(QWidget): def __init__(self): super(Example, self).__init__()

下面的代码生成一个按钮和一个矩形。我想更改它,以便在单击按钮时绘制矩形

from PyQt5.QtWidgets import QWidget, QApplication, QPushButton
from PyQt5.QtGui import QPainter, QColor, QBrush
import sys

class Example(QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):
        self.setFixedSize(400, 400)
        self.setWindowTitle('Colours')
        self.btn = QPushButton("Paint", self)
        self.btn.move(100, 100)
        # self.btn.clicked.connect(self.paintEvent())
        self.show()

    def paintEvent(self, e):
        qp = QPainter()
        qp.begin(self)
        self.drawRectangles(qp)
        qp.end()

    def drawRectangles(self, qp):
        col = QColor(0, 0, 0)
        col.setNamedColor('#d4d4d4')
        qp.setPen(col)
        qp.setBrush(QColor(200, 0, 0))
        qp.drawRect(10, 15, 90, 60)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
谢谢你的帮助

Qt在内部调用
paintEvent()
方法,不应直接调用,而应通过
update()
方法调用,但在您的情况下,您希望在使用特定条件时执行此操作,在此之前,您必须创建一个指示应绘制该方法的标志,以上所有功能均在以下代码中实现:

class Example(QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()
        self.flag = False

    def initUI(self):
        self.setFixedSize(400, 400)
        self.setWindowTitle('Colours')
        self.btn = QPushButton("Paint", self)
        self.btn.move(100, 100)
        self.btn.clicked.connect(self.onClicked)
        self.show()

    def onClicked(self):
        self.flag = True
        self.update()


    def paintEvent(self, e):
        if self.flag:
            qp = QPainter()
            qp.begin(self)
            self.drawRectangles(qp)
            qp.end()

    def drawRectangles(self, qp):
        col = QColor(0, 0, 0)
        col.setNamedColor('#d4d4d4')
        qp.setPen(col)
        qp.setBrush(QColor(200, 0, 0))
        qp.drawRect(10, 15, 90, 60)

“我已经试过好几次了,但都没有成功。”展示一下,或者干脆别说了。所以这不是免费的编码服务。