亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PyQt5:使用事件繪制多個矩形

PyQt5:使用事件繪制多個矩形

千巷貓影 2022-07-19 15:43:01
我正在使用 PyQt5 創建一個桌面應用程序,用戶可以在其中繪制矩形。用戶應該能夠通過第一次鼠標單擊選擇矩形的左上角,通過第二次鼠標單擊選擇右下角。該位置應出現一個矩形,其周長已明確。我創建了應用程序,但是當我繪制另一個矩形時出現問題,前一個矩形消失了。我無法繪制多個矩形。請找到以下代碼以供參考import sysfrom PyQt5.QtWidgets import *from PyQt5 import QtGui, QtCorefrom PyQt5.QtGui import QPainter, QPen, QBrushfrom PyQt5.QtCore import Qtclass Windo(QWidget):    def __init__(self):        super().__init__()        self.setGeometry(150,250,500,500)        self.setWindowTitle("Ammyyy")        self.setWindowIcon(QtGui.QIcon('a.jpeg'))        self.begin = QtCore.QPoint()        self.end = QtCore.QPoint()        self.show()    def paintEvent(self,event):        qp = QPainter(self)        qp.begin(self)        qp.setPen(QPen(Qt.black, 6, Qt.SolidLine))        qp.drawRect(QtCore.QRect(self.begin, self.end))        qp.end()    def mousePressEvent(self, event):        self.begin = event.pos()        self.end = event.pos()    def mouseMoveEvent(self, event):        self.end = event.pos()        self.update()    def mouseReleaseEvent(self, event):        self.begin = event.pos()        self.end = event.pos()app = QApplication(sys.argv)win = Windo()sys.exit(app.exec_())
查看完整描述

1 回答

?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

如果要繪制 n 矩形,則必須通過 QRect 將該信息保存在列表中。另一方面,選擇 2 個點并不意味著 QRect 是有效的,例如,如果第一個點在右側,則第二個點將不會創建有效的矩形,因此必須對矩形進行歸一化。考慮到上述情況,解決方案是:


import sys


from PyQt5.QtCore import Qt, QPoint, QRect

from PyQt5.QtGui import QPainter, QPen, QBrush, QIcon

from PyQt5.QtWidgets import QApplication, QWidget



class Window(QWidget):

    def __init__(self):

        super().__init__()


        self.setGeometry(150, 250, 500, 500)

        self.setWindowTitle("Ammyyy")

        self.setWindowIcon(QIcon("a.jpeg"))


        self.begin = QPoint()

        self.end = QPoint()

        self.rectangles = []


    def paintEvent(self, event):

        qp = QPainter(self)

        qp.setPen(QPen(Qt.black, 6, Qt.SolidLine))


        for rectangle in self.rectangles:

            qp.drawRect(rectangle)


        if not self.begin.isNull() and not self.end.isNull():

            qp.drawRect(QRect(self.begin, self.end).normalized())


    def mousePressEvent(self, event):

        self.begin = self.end = event.pos()

        self.update()

        super().mousePressEvent(event)


    def mouseMoveEvent(self, event):

        self.end = event.pos()

        self.update()

        super().mouseMoveEvent(event)


    def mouseReleaseEvent(self, event):

        r = QRect(self.begin, self.end).normalized()

        self.rectangles.append(r)

        self.begin = self.end = QPoint()

        self.update()

        super().mouseReleaseEvent(event)



if __name__ == "__main__":

    app = QApplication(sys.argv)

    win = Window()

    win.show()

    sys.exit(app.exec_())


查看完整回答
反對 回復 2022-07-19
  • 1 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號