인프런 커뮤니티 질문&답변

HYUNG SEOK LEE님의 프로필 이미지

작성한 질문수

파이썬 입문 및 웹 크롤링을 활용한 다양한 자동화 어플리케이션 제작하기

GUI 기반 Youtube 멀티플레이어 작성(2) - PyQT5, Qt Designer

차이점이 설명부탁드립니다.

18.09.30 09:48 작성

·

125

0

  1. self.btn_1=QPushButton("clikc1",self)
  2. btn_1=QPushButton("clikc1",self)

    1번과 2번의 차이는 알겠는데

3.QPushButton("clikc1")

4.QPushButton("clikc1",self)

3번과 4번의 차이는 무었인가요? 예제에서 어떤때는 3번을 사용하면 화면에 보이고

class문법에서는 주로 4번을 사용하면 보이던데 로그인설정창(class)에서는 또 3번으로

사용하신는것 같은데 또 화이면 표시 되더라구요 => 강의는 어디에 표시할것인가 어디에 붙일것인가)라는 말씀으로 설명하신던데

좀 상세히 설명좀 해주세요..

답변 1

0

좋은사람님의 프로필 이미지
좋은사람
지식공유자

2018. 09. 30. 13:17

HYUNG SEOK LEE 님 안녕하세요.

네 우선 두 개의 차이는 한개의 파일에서 여러개의 클래스를 선언할 때

각 클래스마다 self 를 사용해야 "해당 클래스의 인스턴스인지"를 정확하게 선언해서 함수 등을 사용할 수 있습니다.

로그인 같은 경우에는 해당 파일 내에서 단독으로 사용하는 거라 self를 제외해도 해당 파일의 인스턴스를 인식해서

자동으로 화면에 보여지는 것입니다.

그렇다면 QPushButton 객체의 정확한 레퍼런스를 살펴볼까요?

공식 레퍼런스 링크 입니다.

http://pyqt.sourceforge.net/Docs/PyQt4/qpushbutton.html

init (self, QWidget parent = None)

init (self, QString text, QWidget parent = None)

init (self, QIcon icon, QString text, QWidget parent = None)

여기서 보면 생성자에서 첫 번째보면 parent를 지정해 주지 않으면 None 값으로 자동으로 생성하죠?

즉, 질문해주신 어떤 경우에(부모가 인스턴스 자체인경우에는) 자동으로 해당 화면에서 표시가 되는것입니다.

self를 넣어준 부분에서는 부모가 이 클래스 인스턴스임을 지정해줘서 폼에 출력이 되는 것입니다.

정리하면 한 개의 파일에 여러개의 클래스가 있고 다중의 PyQt 폼이 존재한다면 부모가 누구인지 지정할 경우는

명확하게 self를 넣어준 것이고 아닌 경우는 그냥 생략한 것입니다.

https://wikidocs.net/1742

위의 링크의 self 이해하기 부분을 다시 읽어보시면 도움이 되실 겁니다.