0
다음 코드에서 "그림판"단추를 클릭하면 사각형 하나가 만들어집니다. 그것은 또한 "이동"버튼을 포함하고 있습니다. "이동"버튼을 클릭하여 사각형 1px를 x 및 y 방향으로 모두 이동하려고합니다. 하지만 여기서 실패했습니다.PyQt5 : 버튼을 클릭하여 페인트를 이동하는 방법?
버튼을 클릭하면 변수 값을 전송하는 방법에 대한 질문을 이해할 수 있습니다. 초심자에게는 저에게는 매우 어렵습니다. 어떤 도움을 주시면 감사하겠습니다! self.flag_move가 처음에 정의되어 있지 않기 때문에
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QHBoxLayout, QDoubleSpinBox
from PyQt5.QtGui import QPainter, QColor, QBrush
import sys
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.btnPaint = QPushButton("Paint", self)
self.btnMove = QPushButton("Move x+1 y+1", self)
self.deltax = 0 # original value
self.deltay = 0 # original value
self.btnPaint.clicked.connect(self.onPaint)
self.btnMove.clicked.connect(self.onMove)
self.hlayout = QHBoxLayout()
self.hlayout.addWidget(self.btnPaint)
self.hlayout.addWidget(self.btnMove)
self.hlayout.addStretch(1)
self.setLayout(self.hlayout)
self.show()
def onPaint(self):
self.flag = True
self.update()
def onMove(self):
self.deltax = self.deltax + 1 # button clicked, value +1
self.deltay = self.deltay + 1 # button clicked, value +1
self.flag_move = True
self.update()
def paintEvent(self, e):
if self.flag:
qp = QPainter()
qp.begin(self)
self.drawRectangles(qp)
qp.end()
if self.flag_move:
qp = QPainter()
qp.begin(self)
self.drawRectangles(qp)
qp.end()
def drawRectangles(self, qp):
x1 = 10
y1 = 15
x2 = 90
y2 = 60
col = QColor(0, 0, 0)
col.setNamedColor('#d4d4d4')
qp.setPen(col)
qp.setBrush(QColor(200, 0, 0))
qp.drawRect(x1+self.deltax, y1+self.deltay, x2+self.deltax, y2+self.deltay)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
여러분의 도움에 감사드립니다! 정말 고맙습니다! –
안녕하세요, @yllanesc, 제가 추가 질문을해야합니까? "이동"버튼을 누르기 전까지 사각형을 이동하면 단추 뒤에 사각형이 표시됩니다. 단추 위에 항상 사각형을 놓을 수있는 방법이 있습니까? –
아니요, 당신은 위젯을 그리는 중이며, 버튼은 위젯 위에 있습니다. – eyllanesc