Appia의 IT세상

파이썬[Python GUI, PyQt5 Tutorial 017] 라디오버튼(QRadioButton)만들기 본문

Python/Python PyQt5 (GUI)

파이썬[Python GUI, PyQt5 Tutorial 017] 라디오버튼(QRadioButton)만들기

Appia 2020. 7. 2. 07:34
반응형

파이썬[Python GUI, PyQt5 Tutorial 017] 라디오버튼(QRadioButton)만들기

 

이번 포스팅은 라디오버튼(QRadioButton) 만들기에 대해서 살펴보고자 합니다. 먼저 라디오 버튼은 다음 그림과 같은 형태로 보입니다. 

라디오 버튼 예시 

위의 그림중에 하나만 선택할 수 있게 하는 버튼입니다. 즉 위의 두 버튼중에 하나를 체크 하면, 다른하나는 체크되지 않습니다. 만약 반대쪽 라디오버튼을 클릭 하셨다면, 기존에 선택된 버튼은 선택 해지가 됩니다. 

 

그럼 위와 같은 라디오 버튼을 사용한 코드를 한번 짜보도록 하겠습니다. 먼저, 라디오 버튼을 선택하면, 라디오 버튼에 기술된 텍스트를 라벨에 출력하는 코드를 간단하게 작성해보도록 하겠습니다. 다음 코드를 한번 살펴보겠습니다. 

import sys
 
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QRadioButton, QLabel
 
 
class QtGUI(QWidget):
 
 
    def __init__(self):
 
        super().__init__()
 
        self.num = 0
 
        self.setWindowTitle("Appia Qt GUI")
 
        self.resize(300300)
 
        self.qclist = []
 
        self.position = 0
 
        self.Lgrid = QGridLayout()
 
        self.setLayout(self.Lgrid)
 
        self.label1 = QLabel('select one button',self)
 
        self.Lgrid.addWidget(self.label1,1,1)
 
        rb1 = QRadioButton('Selecto One',self)
 
        rb1.clicked.connect(lambda:self.print_label(rb1))
 
        rb2 = QRadioButton('Selecto Two',self)
        
        rb2.clicked.connect(lambda: self.print_label(rb2))
 
        self.Lgrid.addWidget(rb1,2,1)
 
        self.Lgrid.addWidget(rb2, 22)
 
        self.show()
 
 
    def print_label(self,text):
    
        self.label1.setText(text.text())
 
 
if __name__ == '__main__':
 
    app = QApplication(sys.argv)
 
    ex = QtGUI()
 
    app.exec_()
cs

 

위의 코드를 실행하면 다음과 같은 GUI가 나타납니다. 

위의 예제 실행결과 

그럼 간단하게 기존과 다른 코드 부분에 대해서 한번 살펴보면서 추가적으로 버튼을 선택했을 때 GUI도 살펴보겠습니다. 

import sys
 
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QRadioButton, QLabel
cs

위에서 PyQt5.QtWidgets에서 QRadioButton 부분을 Import 해야 합니다. ( Import 해야만 사용가능합니다.)

 

 

        self.label1 = QLabel('select one button',self)
 
        self.Lgrid.addWidget(self.label1,1,1)
 
        rb1 = QRadioButton('Selecto One',self)
 
        rb1.clicked.connect(lambda:self.print_label(rb1))
 
        rb2 = QRadioButton('Selecto Two',self)
        
        rb2.clicked.connect(lambda: self.print_label(rb2))
 
        self.Lgrid.addWidget(rb1,2,1)
 
        self.Lgrid.addWidget(rb2, 22)
cs

위에 코드에서는 선택된 라디오버튼의 텍스트를 표시할 라벨을 하나 생성하였고, rb1, rb2라는 이름으로 QRadioButton()을 생성하였습니다. 그리고 각 버튼을 선택하였을 때 각 버튼에 표시된 텍스트를 표시하기 위해서 print_label이라는 함수와 연결을 하였습니다. 그럼 print_label 함수를 살펴보겠습니다. 

    def print_label(self,text):
    
        self.label1.setText(text.text())
cs

이와 같이 인자 값을 받아 이 인자 값의 text()값을 label1.setText()을 통해 표시하도록 하였습니다. 

 

다음과 같이 다른 버튼을 선택하면 다음과 같이 버튼에 있는 텍스트가 명시 됩니다. 

버튼 선택 결과

최근에 2가지 기능을 가지는 윈도우 어플을 만들 때 다음과 같은 라디어 버튼을 활용하면 조금 더 효율적이라는 생각이 듭니다. 그럼 간단히 몇가지 다른 항목에서도 많이 사용되는 부분에 대해서 살펴보겠습니다. 

Method Description
text() 위젯(Widget)의 텍스트를 리턴해줍니다. 
setText() 위젯(Widget)의 텍스트를 설정합니다. 
setChecked() 위젯(Widget)의 선택여부를 설정합니다. 
isChecked() 위젯(Widget)의 선택여부를 리턴해줍니다. 
pressed() 위젯(Widget)을 누를 때 이벤트를 발생합니다. 
clicked() 위젯(Widget)을 클릭할 때 이벤트를 발생합니다. 

 

위와 같은 메소드를 활용할 수 있습니다. 

 

이번 포스팅에서는 파이썬[Python GUI, PyQt5 Tutorial 017] 라디오버튼(QRadioButton)만들기라는 주제로 포스팅을 해봤습니다. 생각보다는 활용정도가 확 높지는 않지만, 알아두면 매우 유용하게 사용이 가능합니다. 혹시 궁금하신점이나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 감사합니다. 

반응형
Comments