소연의_개발일지
article thumbnail

출처: https://stackoverflow.com/questions/13050810/pyqt-button-clicked-name

 

self.sender():

클릭된 버튼의 객체를 가져오는 PyQt의 메소드.

버튼을 클릭했을 때 연결해 놓은 함수 내에 self.sender() 를 사용하면 클릭한 버튼의 이름을 가져오는 등의 방법을 사용할 수 있다.

이 때 버튼의 이름을 가져오려면, .text()기능을 사용해야 한다.

 

 

버튼을 클릭하는 간단한 예제

import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class Widget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        layout = QVBoxLayout()
        sample_btn = QPushButton('버튼')
        sample_btn.clicked.connect(self.btn_clicked)

        self.sample_lab = QLabel('버튼이 클릭되지 않았습니다.')

        layout.addWidget(sample_btn)
        layout.addWidget(self.sample_lab)
        self.setLayout(layout)
    def btn_clicked(self):
        sending_button = self.sender()
        # btn_name = sending_button.text()
        self.sample_lab.setText(f'{sending_button.text()}이 선택되었습니다!')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    widget = Widget()
    widget.show()

    sys.exit(app.exec_())

코드 설명

layout = QVBoxLayout()
sample_btn = QPushButton('버튼')
sample_btn.clicked.connect(self.btn_clicked)

QVBoxLayout()으로 기본 레이아웃을 만든다.

그리고 QPushButton으로 '버튼'이름을 가진 sample_btn을 만든다.

sample_btn을 클릭했을 때(clicked), btn_clicked 함수로 이동하도록(connect) 설정한다.

 

self.sample_lab = QLabel('버튼이 클릭되지 않았습니다.')

라벨을 하나 만든다. 이 라벨에는 '버튼이 클릭되지 않았습니다'라는 글이 씌여있다.

함수에 연결시킬 것이기 때문에 self.를 앞에 붙여준다.

 

layout.addWidget(sample_btn)
layout.addWidget(self.sample_lab)

self.setLayout(layout)

레이아웃에 addWidget으로 위젯을 하나씩 추가해 준다.

sample_btn, saple_lab을 추가해 준다.

 

    def btn_clicked(self):
        sending_button = self.sender()
        # btn_name = sending_button.text()
        self.sample_lab.setText(f'{sending_button.text()}이 선택되었습니다!')

버튼이 클릭될때 불러와지는 함수

self.sender()로 sample_btn의 메서드를 가져온다.

이 가져온 메서드는 sending_button에 저장된다.

그리고 sending_button.text()를 하면 버튼의 이름이 불러와진다.

self.sample_lab.setText(f'{sending_button.text()}이 선택되었습니다!')

이렇게 작성했지만

    def btn_clicked(self):
        sending_button = self.sender()
        btn_name = sending_button.text()
        self.sample_lab.setText(f'{btn_name}이 선택되었습니다!')

이렇게 btn_name이라는 변수를 만들어서 버튼의 이름을 불러오는 부분을 따로 만들어 가져와도 상관없다.

 

 

 


가위바위보 만드는 과정에서 각 버튼의 이름을 가져오려고 공부한 내용을 정리해 봤다.

profile

소연의_개발일지

@ssoyxon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!