PyQt5의 QRadioButton 클래스에 대해 다룰 것입니다. 라디오 버튼은 여러 옵션 중 하나를 선택할 수 있게 해주는 유용한 위젯입니다. 기본적인 사용법부터 모든 주요 메서드까지 상세히 설명하겠습니다.
QRadioButton 소개
QRadioButton 위젯은 라디오 버튼을 생성하는 데 사용됩니다. 라디오 버튼은 체크되거나 체크 해제될 수 있으며, 동일한 그룹 내에서 오직 하나의 버튼만 체크될 수 있습니다.
기본 사용법
QRadioButton을 사용하기 위해 필요한 모듈을 임포트하고, 애플리케이션 인스턴스를 생성합니다.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton, QVBoxLayout
app = QApplication(sys.argv)
window = QWidget()
layout = QVBoxLayout()
radio_button1 = QRadioButton("옵션 1")
radio_button2 = QRadioButton("옵션 2")
layout.addWidget(radio_button1)
layout.addWidget(radio_button2)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
이 예제에서는 두 개의 라디오 버튼을 생성하고, 이를 수직 레이아웃에 추가합니다. 애플리케이션을 실행하면 "옵션 1" 또는 "옵션 2"를 선택할 수 있습니다.
QRadioButton의 메서드
QRadioButton 클래스는 QAbstractButton을 상속받아 버튼 위젯의 핵심 기능을 제공합니다. 주요 메서드와 속성을 살펴보겠습니다.
1. __init__(self, text='', parent=None)
라디오 버튼을 초기화합니다. text 매개변수는 버튼의 레이블을 설정하고, parent는 부모 위젯을 설정합니다.
radio_button = QRadioButton("옵션 1")
2. isChecked(self) -> bool
라디오 버튼이 체크되었는지 여부를 반환합니다. 체크되었으면 True, 그렇지 않으면 False를 반환합니다.
if radio_button.isChecked():
print("라디오 버튼이 체크되었습니다.")
3. setChecked(self, checked: bool)
라디오 버튼의 체크 상태를 설정합니다. True를 전달하면 버튼이 체크되고, False를 전달하면 체크 해제됩니다.
radio_button.setChecked(True)
4. toggled(self, bool) [signal]
버튼의 체크 상태가 변경될 때마다 이 시그널이 발생합니다. 이 시그널을 슬롯(함수)에 연결하여 상태 변경 시 동작을 수행할 수 있습니다.
def on_toggled(checked):
print("체크 상태:", checked)
radio_button.toggled.connect(on_toggled)
5. text(self) -> str
라디오 버튼의 텍스트를 반환합니다.
print(radio_button.text())
6. setText(self, text: str)
라디오 버튼의 텍스트를 설정합니다.
radio_button.setText("새로운 옵션")
7. setIcon(self, icon: QIcon)
라디오 버튼에 아이콘을 설정합니다.
from PyQt5.QtGui import QIcon
icon = QIcon("path/to/icon.png")
radio_button.setIcon(icon)
8. setEnabled(self, enabled: bool)
라디오 버튼을 활성화 또는 비활성화합니다. 비활성화된 버튼은 상호작용할 수 없습니다.
radio_button.setEnabled(False)
9. isEnabled(self) -> bool
라디오 버튼이 활성화되었는지 여부를 반환합니다. 활성화되었으면 True, 그렇지 않으면 False를 반환합니다.
if radio_button.isEnabled():
print("라디오 버튼이 활성화되었습니다.")
10. click(self)
라디오 버튼을 클릭하는 것과 같은 동작을 시뮬레이트합니다.
radio_button.click()
11. toggle(self)
라디오 버튼의 체크 상태를 토글합니다. 현재 체크 상태가 체크되었으면 체크 해제되고, 체크 해제되었으면 체크됩니다.
radio_button.toggle()
12. setAutoExclusive(self, enabled: bool)
라디오 버튼이 독점 버튼 그룹의 일부인지 설정합니다. True로 설정하면 그룹 내에서 오직 하나의 버튼만 체크될 수 있습니다.
radio_button.setAutoExclusive(True)
13. isAutoExclusive(self) -> bool
라디오 버튼이 독점 버튼 그룹의 일부인지 여부를 반환합니다.
if radio_button.isAutoExclusive():
print("라디오 버튼이 독점 버튼 그룹의 일부입니다.")
고급 예제
여러 개의 라디오 버튼을 독점 그룹으로 설정하고, 시그널과 슬롯을 활용하는 고급 예제를 만들어보겠습니다.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton, QVBoxLayout, QLabel
class RadioButtonDemo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
layout = QVBoxLayout()
self.label = QLabel("선택된 옵션: 없음", self)
self.radio_button1 = QRadioButton("옵션 1", self)
self.radio_button2 = QRadioButton("옵션 2", self)
self.radio_button3 = QRadioButton("옵션 3", self)
self.radio_button1.toggled.connect(self.on_toggled)
self.radio_button2.toggled.connect(self.on_toggled)
self.radio_button3.toggled.connect(self.on_toggled)
layout.addWidget(self.radio_button1)
layout.addWidget(self.radio_button2)
layout.addWidget(self.radio_button3)
layout.addWidget(self.label)
self.setLayout(layout)
self.setWindowTitle("QRadioButton 데모")
def on_toggled(self):
selected_text = "선택된 옵션: "
if self.radio_button1.isChecked():
selected_text += self.radio_button1.text()
elif self.radio_button2.isChecked():
selected_text += self.radio_button2.text()
elif self.radio_button3.isChecked():
selected_text += self.radio_button3.text()
else:
selected_text += "없음"
self.label.setText(selected_text)
app = QApplication(sys.argv)
demo = RadioButtonDemo()
demo.show()
sys.exit(app.exec_())
이 예제에서는 RadioButtonDemo 클래스를 생성하고, 세 개의 라디오 버튼을 추가합니다. 각 버튼의 toggled 시그널을 on_toggled 슬롯에 연결하여 선택된 옵션을 표시하는 레이블을 업데이트합니다.
'프로그래밍 > python' 카테고리의 다른 글
PyQt5 QLineEdit: 모든 속성과 사용법 (0) | 2024.05.21 |
---|---|
PyQt5 QComboBox: 모든 옵션과 사용 방법 (0) | 2024.05.19 |
PyQt5이용 QCheckBox 사용하기 (0) | 2024.05.14 |
PyQt5 QLabel 사용하기 (0) | 2024.05.12 |
위젯 QPushButton 사용 (0) | 2024.05.10 |