pyqt5는 QTimer를 구현하기만 하면 타이머가 트리거될 때마다 self.update()를 사용하며 드로잉을 업데이트하고 원하는 위치로 업데이트할 수 있다.
#!/usr/bin/env python3
import sys
from PyQt5.QtCore import pyqtSlot, QTimer, Qt, QCoreApplication
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtWidgets import QWidget, QApplication, QPushButton
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
self.pos_x = int(self.width() / 2)
self.direction = 1
self.speed = 5
def initUI(self):
# 윈도우 설정
self.setGeometry(300, 300, 300, 200) # x, y, w, h
self.setWindowTitle('QPaint Move')
# Timer 설정
self.timer = QTimer(self)
self.timer.start(1000/30)
self.timer.timeout.connect(self.timeout_run)
# 창닫기 버튼
btn = QPushButton('Quit', self)
btn.move(self.width() / 2 - 40, self.height() / 2 + 50)
btn.resize(btn.sizeHint())
btn.clicked.connect(QCoreApplication.instance().quit)
def paintEvent(self, e):
qp = QPainter()
qp.begin(self)
self.draw_point(qp)
qp.end()
def draw_point(self, qp):
qp.setPen(QPen(Qt.blue, 8))
qp.drawPoint(self.pos_x, self.height() / 2)
def timeout_run(self):
if self.pos_x < 0 or self.pos_x > self.width() - 8:
self.direction *= -1
self.pos_x = self.pos_x + (self.direction * self.speed)
print(self.pos_x, self.width())
self.update()
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
'프로그래밍 > python' 카테고리의 다른 글
설치된 파이썬이 32비트인지 64비트인지 확인하기 (0) | 2020.08.21 |
---|---|
장고 한글파일 첨부시 에러 (2) | 2020.02.12 |
장고에서 소셜인증하기 - 1. 파이썬 패키지 설치 (0) | 2019.05.10 |