반응형

버튼을 누르면 0% ~ 100% 의 로딩바를 채우고 messagebox를 띄우는 코드를 작성해보겠다.

먼저 코드와 실행화면부터 확인하고 설명하도록 한다.

코드

import os
import sys
from time import sleep

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)
        self.btn_test.clicked.connect(self.progress_loading)

    def progress_loading(self):
        for i in range(101):                        # 1~100 까지
            self.progress.setValue(i)               # i 증가
            sleep(0.1)                              # 0.1초마다 수행
        self.msg_box()

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

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

실행화면



먼저 Qtdesigner를 통해 ui를 만들어보자.

ui만들기

ProgressBar 위젯을 Mainwindow에 드래그 후 우측 속성에서 value를 0으로 바꾸어주자.

이 value는 초기값을 의미한다.

그리고 object명을 progress로 변경해준다.(이름은 아무거나 해도된다.)

추가로 옆에 btn_test 버튼 오브젝트를 하나 만들어 준다.

 

1. 버튼과 progressbar를 signal - slot 연결하기.

class WindowClass(QMainWindow, form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.btn_test.clicked.connect(self.progress_loading) # btn_test 를 progress_loding함수에 연결

 

2. progress_loding 함수 만들기.

    def progress_loading(self):
        for i in range(101):                        # 1~100 까지
            self.progress.setValue(i)               # i 증가
            sleep(0.1)                              # 0.1초마다 수행
        self.msg_box()				    # msg_box 함수 호출

여기서 self.progress.setValue( ) 는 progressBar의 값을 설정해주는 메서드이다.

 

3. msg_box 함수 만들기.

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

 

총 코드와 실행 화면은 맨 위와 같다. 

반응형

+ 최근 글