QTableWidget 동적생성/삭제
마스터욱
4
89
0
0
2018-04-03 17:07:08
동적으로 테이블 row를 컨트롤하는걸 웹방식으로 생각했다가 단디 당한 기분이다.
row 생성은 매우쉽다.
단순히 insertRow 만으로 가능하다.
하지만 중간에 row 를 삭제하는건 간단하지 않다.
만일 1,2,3의 row 가 있다고 가정할때 2번을 지우려고 한다면, 2번을 지우고, 3번을 2번 자리로 옮겨야 한다. 물론 4가 있다면 4도 3으로 옮겨야 한다.
결국 노가다 뛰어서 성공을 하긴 했다만, 이거말고 간단하게 해결하신 분이 있다면 좀 알려줭.
class OrderSetupDialog(QDialog, order_ui):
def __init__(self):
super().__init__()
# print("OrderSetupDialog 오픈됨." + str(order_ui))
try:
self.setupUi(self)
except Exception as error:
print(error)
self.btn_order_add.clicked.connect(self.order_table_add)
self.vars = locals()
def order_table_add(self):
cnt = self.order_table.rowCount()
self.btn_order_add_proc(cnt)
def btn_order_add_proc(self, rowCnt):
# print("btn_order_add_proc 호출됨")
# row = self.order_table.rowCount()
# row_index = self.order_row_index
# print("row = " + str(row) + ", row_index = " + str(row_index))
self.order_table.insertRow(rowCnt)
self.vars['edit_name_%d' % rowCnt] = QLineEdit()
self.order_table.setCellWidget(rowCnt, 0, self.vars['edit_name_%d' % rowCnt])
self.vars['edit_code_%d' % rowCnt] = QLineEdit()
self.order_table.setCellWidget(rowCnt, 1, self.vars['edit_code_%d' % rowCnt])
self.vars['btn_remove_%d' % rowCnt] = QPushButton("삭제" + str(rowCnt))
self.vars['btn_remove_%d' % rowCnt].clicked.connect(partial(self.btn_remove_clicked, rowCnt))
self.order_table.setCellWidget(rowCnt, 2, self.vars['btn_remove_%d' % rowCnt])
def btn_remove_clicked(self, index):
# print("btn_remove_clicked 호출, index = " + str(index))
# self.order_table.removeRow(index)
rowCnt = self.order_table.rowCount()
for i in range(rowCnt):
if index > i:
continue
elif index == i:
self.order_table.removeRow(index)
else:
edit_name_value = self.vars['edit_name_%d' % i].text()
edit_code_value = self.vars['edit_code_%d' % i].text()
upper_number = i - 1
self.btn_order_add_proc(upper_number)
self.vars['edit_name_%d' % upper_number].setText(edit_name_value)
self.vars['edit_code_%d' % upper_number].setText(edit_code_value)
self.order_table.removeRow(i)
ㅇㅇ