다음 예제는 QTimer 의 사용방법 및 활용에 관한 예제입니다.
전체 코드
from PyQt5.QtWidgets import *
from PyQt5 import uic
from PyQt5.QtCore import Qt
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
import os
PATH = os.path.dirname(os.path.abspath(__file__))
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
uic.loadUi(os.path.join(PATH, 'ex.ui'), self)
self.setWindowTitle('QTimer 예제')
self.timer = QTimer()
self.t = QTimer()
self.t.start()
self.timer.timeout.connect(self.count)
self.reset()
self.t.timeout.connect(self.show_remaind)
self.start_btn.clicked.connect(self.timer_start)
self.stop_btn.clicked.connect(self.timer.stop)
self.set_btn.clicked.connect(self.set_interval)
self.ss_btn.clicked.connect(self.singleshot)
self.reset_btn.clicked.connect(self.reset)
def reset(self):
self.interval = 1000
self.cnt = 0
self.rt = -1
self.is_rs = False
self.timer.setInterval(self.interval)
self.remaind_le.setText('')
self.count_le.setText('')
if self.timer.isActive():
self.timer.stop()
def singleshot(self):
def msg_box():
QMessageBox.information(self, self.windowTitle(), self.ss_le_2.text())
self.ss_le.setText('')
self.ss_le_2.setText('')
self.timer.singleShot(int(self.ss_le.text())*1000, msg_box)
def show_remaind(self):
if self.timer.isActive():
self.rt = self.timer.remainingTime()
self.remaind_le.setText('ms: '+ str(self.rt))
def timer_start(self):
itv = self.interval
if self.rt > -1:
self.is_rs = True
itv = self.rt
self.timer.start(itv)
def count(self):
if self.is_rs:
self.timer.setInterval(self.interval)
self.is_rs = False
self.cnt += 1
self.count_le.setText('sec: ' + str(self.cnt))
def set_interval(self):
if not self.timer.isActive():
self.reset()
self.interval = int(self.iv_le.text()) * 1000
self.timer.setInterval(self.interval)
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setStyle(QStyleFactory.create('Fusion'))
main_window = MainWindow()
main_window.show()
app.exec_()
QTimer class
- QTimer 클래스는 타이머를 위한 고급 프로그래밍 인터페이스를 제공한다.
- QTimer 객체를 생성하고 timeout() 신호를 해당 슬롯에 연결한 후 start() 를 호출한다.
- 호출한 시점부터는 일정한 간격으로 timeout() 신호를 방출한다.
일정 시간 간격으로 지속적으로 호출하기
다음 코드는 1초 간격으로 run() 함수를 호출합니다.
QTimer 객체를 생성하여 timeout signal 과 수행 함수를 연결하고 1초 간격의 Inverval 로 객체를 수행합니다.
Inverval 설정에는 두 가지 방법(#1, #2)이 있습니다.
다음은 예시 코드이며 전체 코드와 관련이 없습니다.
def run():
print('run')
timer = QTimer()
timer.timeout.connect(run)
# 1
#timer.setInverval(1000)
#timer.start()
# 2
timer.start(1000)
#timer.stop()
QTimer 객체가 실행중인지 확인할 때는 isActive() 를 사용합니다.
다음은 예시 코드이며 전체 코드와 관련이 없습니다.
if timer.isActivate():
print('running...')
else:
print('stopped.')
QTimer 객체의 Interval 확인 및 설정 interval() / setInterval()
다음은 예시 코드이며 전체 코드와 관련이 없습니다.
# timer = QTimer()
# timer.setInterval(1000)
old_interval = timer.interval()
new_interval = 2000
timer.setInterval(new_interval)
timer.start()
QTimer 객체의 남은 시간 확인 , remainingTime()
주의할 점은, 객체가 동작중일 상태일 때만 정상 값을 반환합니다. (중지되었을 경우, -1 반환)
전체 코드에서 일부를 가져왔습니다.
다음은 두 개의 QTimer 객체를 두어, 상태를 확인하고 남은 시간을 출력하는데 사용했습니다.
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
uic.loadUi(os.path.join(PATH, 'ex.ui'), self)
self.setWindowTitle('QTimer 예제')
self.timer = QTimer()
self.t = QTimer()
self.t.start()
self.timer.timeout.connect(self.count)
self.reset()
self.t.timeout.connect(self.show_remaind)
...........
def show_remaind(self):
if self.timer.isActive():
self.rt = self.timer.remainingTime()
self.remaind_le.setText('ms: '+ str(self.rt))
일회용 타이머 singleShot(msec, function)
전체 코드에서 일부를 가져왔습니다.
SingShot 버튼(그림)을 클릭하면 다음 singleshot() 함수가 호출됩니다.
self.ss_btn.clicked.connect(self.singleshot)
....
def singleshot(self):
def msg_box():
QMessageBox.information(self, self.windowTitle(), self.ss_le_2.text())
self.ss_le.setText('')
self.ss_le_2.setText('')
self.timer.singleShot(int(self.ss_le.text())*1000, msg_box)
주요 특징
-
QTimer 객체를 중지하고 다시 시작 경우, 남은 시간은 초기화된다. (stop()->start())
-
QTimer 객체가 중지된 경우 remaingTime()은 -1을 리턴한다.
-
QTimer 객체가 동작중일 때 setInverval을 설정하면, 객체는 새로운 inverval 로 다시 시작한다.
문의
프로그램 실행을 위한 .py .ui 파일이 필요하신 분은 댓글에 메일을 남겨주시면 보내드리겠습니다.
'Application > PyQt5' 카테고리의 다른 글
카페에서 노트북하시는 분들께 유용한 앱! (0) | 2020.07.18 |
---|---|
파이썬 파이큐티( PyQt5) 앱 만들기 : 이미지 다운로더(크롤러) (0) | 2020.07.16 |
파이썬 파이큐티( PyQt5) 앱 만들기 : 디바이스 스캐너(아이피) (0) | 2020.07.11 |
파이썬 파이큐티( PyQt5) 앱 만들기 : 이미지 파일 간편 변환 (8) | 2020.07.09 |
파이썬 파이큐티(PyQt5) 앱 만들기 : 확장자별 파일 자동분리 (0) | 2020.07.03 |