row 추가 후, table에서 런타임 에러 발생
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)
Author And Source
이 문제에 관하여(row 추가 후, table에서 런타임 에러 발생), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ynoolee/row-추가-후-table에서-런타임-에러-발생저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)