반응형

저번 장에서 PyQt5 기본 세팅 및 시그널-슬롯 연결을 해보았다.

https://trading-for-chicken.tistory.com/25

 

01. Qtdesigner를통한 Pyqt5 기본 세팅하기.

Pyqt5를 다뤄본 사람들이라면 알겠지만, 레이아웃 요소 하나하나를 코딩하는것 보다 Qtdesigner 툴을 이용하면 훨씬 편하다. 다만, 코딩보단 범용성이 떨어지기때문에 때에 따라서는 사용상 어려움

trading-for-chicken.tistory.com

여기서 시그널-슬롯 연결 할 때 self.btn_test.clicked.connect(self.testclick) 과 같이 코딩을 따로 해줘야 하는데, 이는

QtDesigner에서 미리 설정해 둘 수 있다. 아래를 보자.

위 툴바에서 [시그널/슬롯편집] 아이콘을 누른다음에, 만들어두었던 'btn_test' 버튼을 클릭해서 아무데나 드래그하면

아래 '연결 설정' 창이 뜬다. 여기서 clicked()를 클릭하고 편집을 눌러보자.

 

여기서 [+] 버튼을 눌러 아까 만들어두었던 함수인 testclick( )를 입력하고 확인을 누른다.

 

그럼 위처럼 슬랏이 생성되는데 선택하고 확인을 누르면 아래와 같이 표시된다.

test 버튼을 클릭할 경우 testclick( ) 함수가 실행되는것을 직관적으로 볼 수 있다.

이제 코딩을 아래와 같이 바꿔보자.

import os
import sys

from PyQt5.QtWidgets import *
from PyQt5 import uic

def resource_path(relative_path):
    base_path = getattr(sys, "_MEIPASS", os.path.dirname(os.path.abspath(__file__)))
    return os.path.join(base_path, relative_path)

form = resource_path('test.ui')
form_class = uic.loadUiType(form)[0]

class WindowClass(QMainWindow, form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        #self.btn_test.clicked.connect(self.testclick) # 이제 이부분은 필요가 없다.

    def testclick(self):
        print('test')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    myWindow = WindowClass()
    myWindow.show()
    app.exec_()

실행 후 test 버튼 클릭시 self.btn_test.clicked.connect(self.testclick)가 없음에도 정상 작동하는것을 확인할 수 있다.

 

반응형

+ 최근 글