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

2011 단어 PyQTPyQT

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)

좋은 웹페이지 즐겨찾기