본문 바로가기

프로그래밍

QtDesigner로 작성한 ui파일 로드 후 이벤트 주입 및 다루기

테스트로 작성한 윈도우에 신규 버튼과 이 버튼을 통한 테이블 제어, 상태바, 라벨, 텍스트 필드를 다뤄보려 한다.
 
버튼과 테이블, 상태바, 라벨, 텍스트 필드를 가진 윈도우화면은 아래와 같다.
 
테이블은 GroupBox 하위, ScrollBox 하위에 속하게 했고 
버튼은 그룹 밖에 있다.
 
 
 
이 버튼과 테이블을 접근하기 위해서는 QtDesigner의 속성에서 objectName 잘 정해줘야 한다.
 
버튼은 testButton
 
테이블은 testTable
 
 
이제 각각에 함수를 만들어서 접근해보자.
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
 
test_ui_class= uic.loadUiType("../ui/test_window.ui")[0]
 
 
class TestWindow(QMainWindow,test_ui_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        # 이벤트 연결, Designerd에서 각 정한 개체명에 바이딩된 이벤트를 처리
        self.testButton.clicked.connect(self.clickedTestButton)
 
    def clickedTestButton(self):
        QMessageBox.about(self, 'testButton 눌림 알람', 'testButton을 눌렀습니다.')
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
    test_window = TestWindow()
    test_window.show()
    app.exec_()
 
 
우선 버튼을 처리해봤다. 잘된다.
 
버튼 동작에 테이블을 채우고, label과 lineEdit값을 참조하여 처리하는 동작을 정의해보자.
 
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
 
test_ui_class = uic.loadUiType("../ui/test_window.ui")[0]
 
class TestWindow(QMainWindow, test_ui_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        # 이벤트 연결
        self.testButton.clicked.connect(self.clicked_test_button)
 
    def clicked_test_button(self):
        message_alert = self.fill_table_with_dummies()
        QMessageBox.about(self, 'testButton 눌림 알람', message_alert)
 
    def fill_table_with_dummies(self):
        # lineEdit의 값을 text()로 가져온다
        total_row_count = int(self.countTempDummy.text() if self.countTempDummy.text() != '' else 0)
        test_table = self.testTable
        if total_row_count <= 0:
            return '비정상 값 입력'
        else:
            three_times_count = 0
            # 테이블의 기존 컬럼 수를 가져온다.
            column_count = int(self.testTable.columnCount())
            # 빈 행수를 설정해준다.
            test_table.setRowCount(total_row_count)
            for i in range(0, total_row_count):
                for j in range(0, column_count):
                    # 테이블에 신규 Item을 만들어서 값을 지정하여 추가한다.
                    test_table.setItem(i, j, QTableWidgetItem(str(i * column_count + j)))
                    # 그냥 돌리기 심심해서 3배수를 걸러냈다.
                    if (i * column_count + j) % 3 == 0:
                        three_times_count += 1
 
        # 라벨에 신규 값을 넣는다. str형태로 넣어야되므로 형변환
        self.totatlCountInfo.setText(str(three_times_count))
        return '처리완료 입력된 전체 칸 수' + str(total_row_count * column_count)
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
    test_window = TestWindow()
    test_window.show()
    app.exec_()

데이터 행수를 지정하고 나서 현재 정해 놓은 컬럼 개수와 연관지어서 테이블의 값도 넣고 데이터도 뿌리는 형태로 작성했다.
 
라벨, 테이블, 라인에디트, 버튼을 제어해봤다.