안녕하세요

PyQt5의 QPushButton를 Diaable하는 방법에 대하여

알아보겠습니다.

 

Button이 눌려지지 말아야 할 경우가 있는데

이럴때 사용자가 누를수 없도록 만드는 것이 Disable입니다.

루프가 돌아갈때나 버튼을 두번 누를 염려가 있는 경우에도

많이 사용하게됩니다.

 

그럼 어떻게 설정하는지 알아보겠습니다.

 

 

먼저 GUI구성하겠습니다.

button 3개와 label1개를 배치했습니다.

button을 누르면 누른 버튼은 다시 선택하지 못하도록

Disable시킬 예정입니다.

 

 

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

UI = 'QPushButton.ui'
class Dialog(QDialog):
    def __init__(self):
        super().__init__()
        uic.loadUi(UI, self)
        self.setting()

    def setting(self):
        self.pb_1.clicked.connect(lambda: self.change('1'))
        self.pb_2.clicked.connect(lambda: self.change('2'))
        self.pb_3.clicked.connect(lambda: self.change('3'))

    def change(self, get):
        if get == '1':
            self.label.setText('1st')
            self.pb_1.setDisabled(True)
            self.pb_2.setEnabled(True)
            self.pb_3.setEnabled(True)
        elif get == '2':
            self.label.setText('2nd')
            self.pb_1.setEnabled(True)
            self.pb_2.setDisabled(True)
            self.pb_3.setEnabled(True)
        elif get == '3':
            self.label.setText('3rd')
            self.pb_1.setEnabled(True)
            self.pb_2.setEnabled(True)
            self.pb_3.setDisabled(True)

app = QApplication(sys.argv)
ex = Dialog()
ex.show()
sys.exit(app.exec_())

코드는 다음과 같습니다.

button입력은 받은 후

클릭된 button을 disable시키고 나머지 버튼은 enable시키도록 했습니다.

클릭된 button이 어떤것인지 알기 위해서 시그널을 보낼때

함수에 특정값을 보내도록 했습니다.

 

 

실행화면입니다.

GUI구성처럼 실행이 되었습니다.

그러면 버튼을 하나하나 클릭해 보겠습니다.

 

 

우선 첫번째 버튼인 1st버튼을 클릭해 보겠습니다.

버튼을 클릭하니 label에 1st가 출력이 되면서

1st버튼은 클릭할 수 없도록 disable되었습니다.

 

 

이번에는 2nd버튼을 클릭해보겠습니다.

1st버튼과 같이 label에 2nd가 출력이 되면서

2nd버튼은 클릭할 수 없도록 disable되었습니다.

반면에 이전에 선택된 1st버튼은 다시 클릭할 수 있도록

enable되었습니다.

 

 

마지막으로 3rd버튼을 클릭해 보겠습니다.

이전과 같이 label에 3rd값이 출력이 되었고

3rd버튼은 클릭 할 수 없도록 disable되었습니다.

 

이렇게 버튼을 클릭을 할 수 있고, 할 수 없도록

disable, enable 하는방법에 대해서 알아보았습니다.

이렇게 사용자의 동작을 제한하는 것도

프로그램을 만드는데 중요하다고 생각합니다.

 

고생하셨구요

하시는 일에 도움이 되었으면 합니다.

감사합니다.