반응형

먼저 코드와 실행 모습을 보고 아래 설명을 진행하겠다.

목표 : 10초마다 messagebox 출력

코드

import os
import sys

from PyQt5.QtWidgets import *
from PyQt5 import uic
from PyQt5.QtCore import *

def resource_path(relative_path):
    base_path = getattr(sys, "_MEIPASS", os.path.dirname(os.path.abspath(__file__)))
    return os.path.join(base_path, relative_path)

form = resource_path('211012.ui')
form_class = uic.loadUiType(form)[0]

class WindowClass(QMainWindow, form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.timer = QTimer(self)                   # timer 변수에 QTimer 할당
        self.timer.start(10000)                     # 10000msec(10sec) 마다 반복
        self.timer.timeout.connect(self.msg_box)    # start time out시 연결할 함수

    def msg_box(self):
        msg = QMessageBox()                         # msg 변수에 msgbox 할당
        msg.setWindowTitle("테스트용")               # 제목설정
        msg.setText('10초마다 실행중')                # 내용설정
        msg.exec_()                                 # 메세지박스 실행

if __name__ == '__main__':
    app = QApplication(sys.argv)
    myWindow = WindowClass()
    myWindow.show()
    app.exec_()

실행모습



Pyqt5에는 Qtimer라고 하는 특정 시간마다 시그널을 보낼 수 있는 메서드가 존재한다.

 

일단 공부를위해 옛날에 만들어두었던 기본 세팅을 사용해보자.

https://trading-for-chicken.tistory.com/25

 

01. Qtdesigner를통한 Pyqt5 기본 세팅하기.

Pyqt5를 다뤄본 사람들이라면 알겠지만, 레이아웃 요소 하나하나를 코딩하는것 보다 Qtdesigner 툴을 이용하면 훨씬 편하다. 다만, 코딩보단 범용성이 떨어지기때문에 때에 따라서는 사용상 어려움

trading-for-chicken.tistory.com

import os
import sys

from PyQt5.QtWidgets import *
from PyQt5 import uic

def resource_path(relative_path):
    base_path = getattr(sys, "_MEIPASS", os.path.dirname(os.path.abspath(__file__)))
    return os.path.join(base_path, relative_path)

form = resource_path('211012.ui')
form_class = uic.loadUiType(form)[0]

class WindowClass(QMainWindow, form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    myWindow = WindowClass()
    myWindow.show()
    app.exec_()

 

 

이제 __init__부에 Qtimer 설정을 해보자.

class WindowClass(QMainWindow, form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.timer = QTimer(self)                   # timer 변수에 QTimer 할당
        self.timer.start(10000)                     # 10000msec(10sec) 마다 반복
        self.timer.timeout.connect(self.msg_box)    # start time out시 연결할 함수

timer 변수를 Qtimer에 할당 한 후, msec 단위로 설정된 반복시간을 start 메서드를 통해 설정한 후 

timeout메서드에 connect를 통해 시그널-슬롯을 연결해준다. 

이제 messagebox를 띄우는 함수를 만들어보자.

    def msg_box(self):
        msg = QMessageBox()                         # msg 변수에 msgbox 할당
        msg.setWindowTitle("테스트용")               # 제목설정
        msg.setText('10초마다 실행중')                # 내용설정
        msg.exec_()                                 # 메세지박스 실행

완성된 코드와 실행 모습은 맨 위와 같다.

반응형

+ 최근 글