row 추가 후, table에서 런타임 에러 발생

ynoolee·2021년 1월 26일
0

clicked 신호에 대한 Slot 함수에 lambda를 이용해서 SelectionModel을 pass했던 것이문제였음.

정보를 추가하기 전의 View에서의 Selection 정보와

정보를 추가한 후의 View의 정보는 다를 수 밖에 없음.

(이번 경우 Row의 수가 달라지는 등)

따라서 정보를 추가하기 전의 view의 Selection Model을 limit_selection 함수에서 처리하다 보니 오류가 생긴 것.

—> 고친 코드 : View 객체를 전달 하는 것으로 변경

즉, clicked신호가 발생하는 순간의 , SelectionModel을 받을 수 있게 변경하였다.

# row당 column의 개수가 몇 개인지가 중요함. + view의 selectionModel이 아닌 table의 view를 전달해야한다.
#<layoutchanged.emit> 시에 refresh가 된 "table view"를 자동으로 이용해서 selection 관리를 하도록 해야 한다.
    def limit_selection_number(self, selection_model):
        #print("limit selection")
        smodel = selection_model.selectionModel()
        selected_indexes = smodel.selectedIndexes()
        col_count = 4  # column개수가 4개 <Movie  Tableview....>
        limit_row = 1  # 1줄까지만 가능.
        # 2개 이상의 Row가 선택되는 경우 -->기존 것 deselect /현재 선택한것 select
        '''
        for index in selected_indexes:
            print(index.row())
        '''
        if len(selected_indexes) > (col_count * limit_row):
            pre_indexes = selected_indexes[0:len(selected_indexes) - (col_count * limit_row)]
            cur_indexes = selected_indexes[len(selected_indexes) - (col_count * limit_row):len(selected_indexes) - (
                        col_count * limit_row) + 4]
            for sel_item in pre_indexes:
                smodel.select(sel_item, smodel.Toggle)
            for cur_item in cur_indexes:
                smodel.select(cur_item, smodel.Select)

0개의 댓글

관련 채용 정보