본문 바로가기
프로그래밍 관련/PyQt

PyQt 클래스 상속에 대하여

by 존버매니아.임베디드 개발자 2021. 12. 1.
반응형

파이썬. 클래스 상속과 생성자에 대하여. 그리고 super에 대하여 (tistory.com)

(위의 글 참고하면 배경지식 습득가능)

 

 

 

PyQt 모듈에는 매우 많은 다양한 클래스가 사전에 정의되어있음

 

이런 클래스에 정의된 메소드 중에, 유저가 메소드 오버라이드를 해서 재정의 해서 써야하는 케이스가 종종있다.

 

그 경우, PyQt에서 제공하는 클래스를 상속 받아서 임의의 클래스를 만들어야하는데 아래 예시를 보자.

 

QListWidget 클래스를 상속받아서 drop_list 라는 임의의 클래스를 정의하고 있다.

class drop_list(QListWidget):
    def __init__(self,input):
        super(drop_list,self).__init__(input)
        #super().__init__(input) #이거랑 위에꺼랑 실행결과 같음
        
        self.DragDropMode(QAbstractItemView.DragDropMode.DropOnly)
        self.setAcceptDrops(True)

    def dragEnterEvent(self,e):
        print("drag in")
        print(type(e.source()))
        if type(e.source())==QTreeWidget:            
            e.accept()
        else:
            e.ignore()

    def dropEvent(self,e):
        print("drop Event")
        self.addItem(e.source().currentItem().text(0))

QlistWidget 클래스를 사용할 때, 어느 위젯에다가 해당 QListWidget을 올려둘 건지 지정해서 사용해야한다.

 

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setupUI()

    def setupUI(self):
        self.setGeometry(1000, 200, 700, 300)
        
        self.list = QListWidget(self)
        self.list.setGeometry(420,0,100,100)

위 예시의 경우

QListWidget을 MainWindow에 올릴 것이기 때문에

self 를 파라미터로 주면서 객체를 생성하고 있다.

 

그 말은 즉슨, QListWidget의 경우 생성자에서 1개의 파라미터를 필요로 한다는 소리다.

따라서, QListWidget을 상속받아서 만든 drop_list 클래스의 생성자에서

super 클래스를 사용해서 QListWidget의 생성자를 호출하려면, 1개의 파라미터를 넘겨줘야 한다는 소리고..

 

그래서 처음 예시코드와 같은 형태로 클래스의 생성자를 정의하는 것이다.

 

 

 

반응형