PyQt 라디오버튼 radio button(1) - 기본개념
유저에게 어떤 메뉴를 선택하게 만드는데, 여러개의 보기중에 1개만 고를 수 있도록하는 기능
그때 사용하는게 라디오 버튼인데 말로 설명하니까 이해 안 될 수 있는데
예를 들어 시험 문제의 정답 고를때 4개의 보기중에 1개만 선택해야되는 그런 버튼 기능을 하는게 라디오버튼이다.
04) QRadioButton - PyQt5 Tutorial - 파이썬으로 만드는 나만의 GUI 프로그램 (wikidocs.net)
위 사이트 출처 . 감사합니다.
관련 메소드
setChecked() . 해당 버튼을 선택상태로 만듬
isChecked(). 해당 버튼이 현재 선택 된 상태인지 알려줌
관련 시그널
clicked() -> 해당 라디오버튼 클릭 됐을 때
toggled() -> 해당 라디오버튼의 상태가 바꼈을 때
예시1
import sys
from PyQt5.QtWidgets import *
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Test")
self.setGeometry(1000, 200, 700, 700)
#라디오버튼 2개, 이것들은 Groupbox1에 올라가고 자기들끼리 exclusive
self.radio1 = QRadioButton("radio1",self)
self.radio1.move(20,0)
self.radio1.clicked.connect(self.radio1_fun)
self.radio2 = QRadioButton("radio2",self)
self.radio2.move(20,100)
self.radio2.clicked.connect(self.radio2_fun)
self.radio3 = QRadioButton("radio3",self)
self.radio3.move(20,200)
self.radio3.clicked.connect(self.radio3_fun)
def radio1_fun(self):
print("button 1 clicked")
def radio2_fun(self):
print("button 2 clicked")
def radio3_fun(self):
print("button 3 clicked")
if __name__ == "__main__":
app = QApplication(sys.argv)
myWindow = MyWindow()
myWindow.show()
app.exec_()
라디오 버튼3개를 사용하고, 3개가 모두 exclusive로 동작함
각각의 라디오 버튼이 클릭되면 각각 연결된 funnction 실행
버튼이 새롭게 클릭 됐을 때만 무언가 동작하고 싶은 경우?
무슨 말이냐면 버튼1이 선택된 상태에서 버튼1을 또 눌렀을 경우에는 아무 동작도 하지않고
원래 선택이 안된 상태였는데 새롭게 선택됐을 때만 무언가를 하게하려면 어떻게 해야 할까?
이 때는 clicked 가 아니라 toggled를 활용하면되는데,
유의할 점은 toggled는 선택이 됐을 때도 실행되지만 , 선택이 풀렸을 때도 실행이 된다는 점이다.
toggled 시그널은 실행될 때 파라미터를 한가지 넘기는데, True 이면 toggled 발생했는데 그 토글이벤트가 새롭게 선택된 이벤트라는 의미이고, false이면 그 토글이벤트가 선택이 해제된 이벤트라는 의미이다.
아래와 같이 코드를 구성하자. 새롭게 set 됐을때만 함수가 실행되는건 아니고 set이 되거나, 해제될 때 함수가 실행되는데 함수가 실행된 후에,
if문을 통해서 현재 발생된 토글이벤트가 새롭게 set된것인지, set이 해제된 것인지를 구분해서 동작하도록 코드 구성
import sys
from PyQt5.QtWidgets import *
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Test")
self.setGeometry(1000, 200, 700, 700)
#라디오버튼 2개, 이것들은 Groupbox1에 올라가고 자기들끼리 exclusive
self.radio1 = QRadioButton("radio1",self)
self.radio1.move(20,0)
self.radio1.toggled.connect(self.radio1_fun)
self.radio2 = QRadioButton("radio2",self)
self.radio2.move(20,100)
self.radio2.toggled.connect(self.radio2_fun)
self.radio3 = QRadioButton("radio3",self)
self.radio3.move(20,200)
self.radio3.toggled.connect(self.radio3_fun)
def radio1_fun(self, checked):
if checked:
print("button 1 clicked")
def radio2_fun(self,checked):
if checked:
print("button 2 clicked")
def radio3_fun(self,checked):
if checked:
print("button 3 clicked")
if __name__ == "__main__":
app = QApplication(sys.argv)
myWindow = MyWindow()
myWindow.show()
app.exec_()
라디오버튼 클릭했을 때 실행되는 function을 버튼 마다 각각 하지않고, 하나의 function을 실행시키고 해당 function안에서 어떤 버튼이 선택된 건지 구분해서 동작 시키기
import sys
from PyQt5.QtWidgets import *
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Test")
self.setGeometry(1000, 200, 700, 700)
#라디오버튼 2개, 이것들은 Groupbox1에 올라가고 자기들끼리 exclusive
self.radio1 = QRadioButton("radio1",self)
self.radio1.move(20,0)
self.radio1.toggled.connect(self.radio_fun)
self.radio2 = QRadioButton("radio2",self)
self.radio2.move(20,100)
self.radio2.toggled.connect(self.radio_fun)
self.radio3 = QRadioButton("radio3",self)
self.radio3.move(20,200)
self.radio3.toggled.connect(self.radio_fun)
def radio_fun(self, checked):
btnNum = 0
if checked:
if self.radio1.isChecked():
btnNum=1
elif self.radio2.isChecked():
btnNum=2
elif self.radio3.isChecked():
btnNum=3
print("Selected Button : %d " %btnNum)
if __name__ == "__main__":
app = QApplication(sys.argv)
myWindow = MyWindow()
myWindow.show()
app.exec_()
'프로그래밍 관련 > PyQt' 카테고리의 다른 글
Pyqt 메뉴 만들기 상위메뉴 (0) | 2022.08.14 |
---|---|
PyQt 라디오버튼 radio button(2) group box (0) | 2022.08.14 |
PyQt. GUI 변경을 외부쓰레드에서하는 것 (0) | 2022.06.15 |
PyQt. 사용자 정의 시그널 (0) | 2022.06.15 |
PyQt. 시그널 슬롯에 대하여 (0) | 2022.06.15 |