Appia의 IT세상

파이썬[Python GUI, PyQt5 Tutorial 005] PyQt5 버튼(QPushButton)의 클릭시 버튼 비활성화하기 본문

Python/Python PyQt5 (GUI)

파이썬[Python GUI, PyQt5 Tutorial 005] PyQt5 버튼(QPushButton)의 클릭시 버튼 비활성화하기

Appia 2020. 6. 13. 07:03
반응형

파이썬[Python GUI, PyQt5 Tutorial 004] PyQt5 버튼(QPushButton)의 클릭시 버튼 비활성화하기

 

이번 포스팅에서는 앞선 포스팅에서 몇가지를 조금 더 응용한 포스팅을 해보고자 합니다. 버튼을 클릭하여 그 버튼을 비활성화 하고자 합니다. 단순하게 버튼을 비활성화 하는 메소드는 매우 간단합니다. 다음을 한번 살펴보겠습니다. 

button.setEnabled(False)

위의 메소드를 통해서, 버튼을 비활성화 할 수가 있습니다. 그럼 관련해서 간단히 코드를 작성해보도록 하겠습니다. 

<example>

import sys
 
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
 
 
class QtGUI(QWidget):
 
 
    def __init__(self):
    
        super().__init__()
        
        self.setWindowTitle("Appia Qt GUI")
        
        self.resize(300300)
        
        button = QPushButton('Button',self)
        
        button.move(10,10)
        
        button.clicked.connect(lambda :self.disable_but(button))
 
        button1 = QPushButton('Button1', self)
        
        button1.move(10,40)
        
        button1.clicked.connect(lambda :self.disable_but(button1))
 
        button2 = QPushButton('Button2', self)
        
        button2.move(1070)
        
        button2.released.connect(lambda: self.disable_but(button2))
 
        self.setWindowTitle("Appia Qt GUI")
        
        self.show()
        
 
    def disable_but(self, vbutton):
    
        vbutton.setEnabled(False)
 
 
if __name__ == '__main__':
 
    app = QApplication(sys.argv)
    
    ex = QtGUI()
    
    app.exec_()
cs

 

위에 코드를 실행하면 다음과 같은 화면이 나타납니다. 

예제 코드 실행 결과 

그럼 여기에서 각 버튼을 클릭하여 보겠습니다. 

비활성화된 버튼이 있는 화면 

그럼 간단히 위의 코드에서 관련된 내용을 살펴보겠습니다. 

    def disable_but(self, vbutton):
    
        vbutton.setEnabled(False)
cs

위의 함수를 통해서 버튼을 비활성합니다. 그리고 다음 보이는 코드를 바탕으로 이 함수와 버튼을 연결합니다. 

        button.clicked.connect(lambda :self.disable_but(button))
cs

각 버튼을 클릭하면, 위의 선언된 disable_but함수를 호출하여 버튼을 비활성화 합니다. 

 

그럼, 특정 버튼을 만들어서 비활성화된 버튼을 활성화 해보도록 하겠습니다. 먼저, List 자료형을 만들고, 관련되서 버튼을 생성할 때마다, 관련된 버튼들을 리스트의 맴버로 추가해둡니다. 활성활 버튼을 눌렸을 때 관련된 리스트에 있는 모든 버튼들이 다시 활성화 되도록 하는 구조로 작업을 진행하시면 됩니다. 그럼 다음 예시를 한번 살펴보겠습니다. 

<example>

import sys
 
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
 
 
class QtGUI(QWidget):
 
 
    def __init__(self):
    
        super().__init__()
        
        self.setWindowTitle("Appia Qt GUI")
        
        self.resize(300300)
        
        self.listv = []
        
        button = QPushButton('Button',self)
        
        button.move(10,10)
        
        button.clicked.connect(lambda :self.disable_but(button))
        
        self.listv.append(button)
 
        button1 = QPushButton('Button1', self)
        
        button1.move(10,40)
        
        button1.clicked.connect(lambda :self.disable_but(button1))
        
        self.listv.append(button1)
 
        button2 = QPushButton('Button2', self)
        
        button2.move(1070)
        
        button2.released.connect(lambda: self.disable_but(button2))
        
        self.listv.append(button2)
 
        button3 = QPushButton('Refresh', self)
        
        button3.move(10010)
        
        button3.clicked.connect( self.refrsh_all)
 
        self.setWindowTitle("Appia Qt GUI")
        
        self.show()
 
 
    def disable_but(self, vbutton):
    
        vbutton.setEnabled(False)
 
 
    def refrsh_all(self):
    
        for i in self.listv:
        
            i.setEnabled(True)
 
 
if __name__ == '__main__':
 
    app = QApplication(sys.argv)
    
    ex = QtGUI()
    
    app.exec_()
cs

 

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

Button ~ Button2의 이름을 가진 버튼을 클릭하면, 비활성화 됩니다. 이 때, Refresh를 클릭하면 모든 버튼이 다시 활성화 됩니다. 

    def refrsh_all(self):
    
        for i in self.listv:
        
            i.setEnabled(True)
cs

먼저 Refresh라는 버튼을 기존에 버튼 생성하는 방법으로 만들고, 위의 코드를 이 버튼과 연결하였습니다. 그전에 다음과 같이 부분들을 추가해주셔야 합니다. 

class QtGUI(QWidget):
 
 
    def __init__(self):
    
        ...# 중간 생략
        
        self.listv = []
        
        button = QPushButton('Button',self)
        
        button.move(10,10)
        
        button.clicked.connect(lambda :self.disable_but(button))
        
        self.listv.append(button)
        
        ...# 하위 생략
cs

위와 같이 먼저 self.listv라는 리스트 객체를 하나 생성합니다. 그리고 버튼을 생성할 때마다, 각 버튼 객체를 리스트에 추가합니다. 이런 형태로 버튼을 비활성화 되어있는 버튼들을 활성화 시킬 수 있습니다. 

 

이번 포스팅에서는 파이썬[Python GUI, PyQt5 Tutorial 005] PyQt5 버튼(QPushButton)의 클릭시 버튼 비활성화하기라는 주제로 포스팅을 해봤습니다. 이와 더불어, 비활성화된 버튼을 활성화 하는 방법또한 살펴봤습니다. 

파이썬[Python GUI, PyQt5 Tutorial 004] PyQt5 버튼(QPushButton)의 이벤트 연결

추가로 위의 링크와 함께 보시면 더욱 도움이 되실 것 같습니다. 혹시 궁금하신 점이나, 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다.감사합니다. 

반응형
Comments