Python

[PyQt5] Spin Box 이벤트 발생 시키기( textChanged Event )

Crazy-M2M 2023. 4. 2. 18:12
300x250
반응형

안녕하세요. Crazy M2M입니다.
오늘은 pypt5를 이용해서 Spin Box 이벤트 발생시키는 방법에 대해서 알아보도록 하겠습니다.
 
Spin Box는 숫자를 입력으로 받을 때 사용하는 위젯입니다. 
위/아래 화살표 방향을 클릭하면 숫자가 증가/감소하도록 하는 기능을 합니다.
그리고 Text 위치에 바로 숫자를 삽입해도 됩니다. 
 
이렇게 숫자가 입력되었을 때 이벤트를 발생시켜 그 내용을 보여주는 기능을 구현해 보겠습니다.
 
먼저 Spin Box를 드래그해서 GUI에 위치시킵니다. 
spinBox 이름으로 객체가 생성되는 것을 확인할 수 있습니다. 
객체명은 나중에 속성을 정의할 때 사용하게 되니 명확하게 알고 있어야 합니다.
 
오른쪽 속성에서 Min / Max 값을 설정할 수 있습니다. 
현재는 0 ~ 99까지의 값을 설정할 수 있도록 설정되었습니다. 
 

 
다음은 Spin Box로 입력했을 때 그 내용을 표시하는 위젯을 생성합니다. 
간단하게 Line Edit 위젯을 사용해 보도록 할게요^^
Line Edit를 드래그해서 GUI 중간쯤에 위치시킵니다. 
lineEdit로 객체명이 생성되었네요. ^^
 
최종 GUI 구성을 다 되었으니 "a.ui"로 저장합니다. 
 

300x250

 

 
Spin Box의  총 3가지  이벤트를 가지고 있습니다. 
 
textChanged(str)
valueChanged(int)
valueChanged(str)
 
이 중에서 가장 많이 사용되는 textChaned()를 사용해 보도록 할게요. 
Spin Box의 내용이 입력되고 그 내용이 Text로 표현되는데 그 값이 변경되었을 때 발생되는 이벤트입니다. 
 
최종 코드는 아래와 같습니다. 

from PyQt5.QtWidgets import *
from PyQt5.uic import loadUi
import sys

class My_Win:
    def __init__(self) -> None:
        self.dlg = loadUi("a.ui")      
        
        self.dlg.spinBox.textChanged.connect(self.sbox_changed)
                  
        self.dlg.show()
        
    def sbox_changed(self, num):
        self.dlg.lineEdit.setText(num + " 입력 되었습니다. ")       

app = QApplication( sys.argv)

my_win = My_Win()

app.exec()

 
코드 설명은 아래와 같습니다. 
 
PyQt5 위젯을 사용하기 위해서 아래 구문을 넣어 줍니다.
from PyQt5.QtWidgets import *

PyQt Designer에서 만들어진 GUI를 Load 하 기 위해서 모듈을 Import 합니다.
from PyQt5.uic import loadUi

System 정보를 사용하기 위해서 아래 모듈도 Import 해주세요. 
import sys
 
현재 GUI를 Load 해서 Class의 변수에 저장합니다. 
self.dlg라는 변수는 GUI 객체를 저장하게 됩니다. 
 

self.dlg = loadUi("a.ui")

 
이제 Spin Box의 textChanged 이벤트를 등록하는 코드입니다. 
만약 Spin Box의 값이 변경되었을 때  sbox_changed 함수를 호출하게 됩니다. 
화살표를 클릭해서 변경하든 텍스트의 값을 바로 바꾸든 Spin Box의 값이 변경되면 호출되는 이벤트입니다. 
 

self.dlg.spinBox.textChanged.connect(self.sbox_changed)

 
sbox_changed 함수의 내용입니다. 
함수의 인자를 보시면 self 이외에 num이라는 변수가 하나 더 보입니다. 
이 변수는 이벤트가 실행되었을 때 넘어오는 속성값입니다. 
 
textChanged(str) 이벤트 함수의 인자가 str로 되어 있는게 보이시죠?
str로 넘어오는 값을 num 이란 변수가 받는 것입니다. 
그 값은 현재의 Spin Box로부터 입력된 값을 의미합니다. 
str은 string으로 문자열로 해석됩니다. 
 

    def sbox_changed(self, num):
        self.dlg.lineEdit.setText(num + " 입력 되었습니다. ")

 
이제 실행시켜 보겠습니다. 
F5를 눌러 Build 합니다. 
 

 
문제없이 GUI가 실행되었습니다. 
Spin Box의 오른쪽에 보이는 위/아래 화살표를 눌러 주면 값이 변경됩니다. 
그 값이 Line Edit에 표시되는 걸 확인할 수 있습니다. 
 

반응형

 

 
텍스트 박스에 바로 값을 입력해서 변경할 수도 있습니다. 
역시 값이 변경되어도 Line Edit에 그 값이 잘 표시되고 있습니다. ^^
알고 나니 참 쉽네요. ^^
 

 
이것으로 Spin Box 이벤트 실행 방법에 대해서 알아보았습니다. 
그럼 오늘도 칼퇴근!!!

728x90
반응형