본문으로 바로가기
728x90
 

파이큐티(PyQt5) 시작하기 - 구글 날씨 검색기 만들기 -2 : 모듈 연동과 이벤트 처리

파이큐티(PyQt5) 시작하기 - 구글 날씨 검색기 만들기 -1 : 디자이너 활용 디자인하기 먼저 MainWindow 를 하나 생성합니다. 키워드를 검색할 수 있는 입력창과 버튼 그리고 결과를 출력해줄 수 있는 ��

jvvp.tistory.com

 

테이블에 아이템 삽입

접근해야하는 위젯들의 object name

 

결과로 받은 데이터를 tableWidget에 item을 삽입해야합니다.

우선 저는 다음과 같이 set_table() 함수를 만들어서 크롤러의 결과 데이터를 넘겨줄 것입니다.

def run(self):
    keyword = self.lineEdit.text()
    self.crawler.set_keyword(keyword + ' 날씨')
    self.crawler.run()
    r = self.crawler.get_result()
    self.set_table(r)

def set_table(self, data):
    pass

 

QTableWidget에 아이템을 추가할 때는 여러 개를 동시에 추가하는 것하나씩 받아 추가하는 것을 고려해야합니다.

지금은 특성상 하나씩 받을 것입니다.

 

현재 tableWidget 의 rowCount 를 가져옵니다.

아무것도 없으니 0 이겠죠. 이것을 row 의 인덱스로 사용할 것입니다.

row_idx = self.tableWidget.rowCount()

행을 먼저 추가해야만 아이템을 삽입할 수 있습니다.

insertRow로 행을 추가합니다.

row_idx = self.tableWidget.rowCount()

다음과 같이 위젯에 배치되어있는 컬럼의 인덱스를 찾을 것입니다.

나중에 위젯의 컬럼위치를 변경할 때 다음 리스트의 컬럼위치도 똑같이 변경해주면 되겠죠.

self.table_cols = ['지역명', '시간', '상태']

...

col_idx = self.table_cols.index('지역명')

그리고 str 타입의 데이터로 QTableWidgetItem 객체를 생성하고

table_item = QtWidgets.QTableWidgetItem(data['loc'])

마지막에는 tableWidget에 삽입합니다.

self.tableWidget.setItem(row_idx, col_idx, table_item)

 

결과입니다.

 

전체코드

import sys
from PyQt5 import QtCore, QtWidgets, uic
from PyQt5.QtWidgets import QMainWindow

from crawler import *

ui = uic.loadUiType('app.ui')[0]
class MainWindow(QMainWindow, ui):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.run)
        self.crawler = GoogleWeather()
        self.table_cols = ['지역명', '시간', '상태']
    
    def run(self):
        keyword = self.lineEdit.text()
        self.crawler.set_keyword(keyword + ' 날씨')
        self.crawler.run()
        r = self.crawler.get_result()
        self.set_table(r)

    def set_table(self, data):
        if data:
            row_idx = self.tableWidget.rowCount()
            self.tableWidget.insertRow(row_idx)
            col_idx = self.table_cols.index('지역명')
            table_item = QtWidgets.QTableWidgetItem(data['loc'])
            self.tableWidget.setItem(row_idx, col_idx, table_item)
            
            col_idx = self.table_cols.index('시간')
            table_item = QtWidgets.QTableWidgetItem(data['time'])
            self.tableWidget.setItem(row_idx, col_idx, table_item)
            
            col_idx = self.table_cols.index('상태')
            table_item = QtWidgets.QTableWidgetItem(data['status'])
            self.tableWidget.setItem(row_idx, col_idx, table_item)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    main_window = MainWindow()
    main_window.show()
    app.exec_()