일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- win32com
- Android
- 윈도우11
- python
- 비주얼베이직
- 아웃룩
- 깃
- Windows10
- VBA
- 파워포인트
- Excel
- html
- office
- Outlook
- windows
- 파이썬3
- 윈도우10
- 오피스
- 파이썬GUI
- 파이썬
- Windows11
- matlab
- 엑셀
- python3
- 안드로이드
- git
- pyqt5
- pandas
- pythongui
- 문자열
Appia의 IT세상
파이썬[Python GUI, PyQt5 Tutorial 005] PyQt5 버튼(QPushButton)의 클릭시 버튼 비활성화하기 본문
파이썬[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(300, 300)
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(10, 70)
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(300, 300)
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(10, 70)
button2.released.connect(lambda: self.disable_but(button2))
self.listv.append(button2)
button3 = QPushButton('Refresh', self)
button3.move(100, 10)
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)의 이벤트 연결
추가로 위의 링크와 함께 보시면 더욱 도움이 되실 것 같습니다. 혹시 궁금하신 점이나, 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다.감사합니다.