Пример #1
0
class AccountList(QWidget):

    VALID = {True: 'O', False: 'X'}
    horizontal_header = ['체크', '아이디', '비밀번호', '검증']

    def __init__(self):
        super().__init__()

        self.account_list = []
        self.max_account_len = 5

        self.layout = QVBoxLayout()
        self.table_list = QTableWidget()

        self.init_UI()

    def init_UI(self):
        self.layout.addWidget(self.table_list)
        self.table_setting()
        self.setLayout(self.layout)

    def table_setting(self):
        self.table_list.showGrid()
        self.table_list.setColumnCount(len(self.horizontal_header))
        self.table_list.setHorizontalHeaderLabels(self.horizontal_header)
        self.table_list.alternatingRowColors()
        self.table_list.setMouseTracking(True)

        for idx in range(len(self.horizontal_header)):
            self.table_list.setColumnWidth(idx, 70)

    def make_connection(self, obj):

        if type(obj).__name__ == 'AccountInput':
            obj.send_account.connect(self.onAccountSent)

        elif type(obj).__name__ == 'ValidationButtons':
            validation_button = obj.validation_button
            delete_button = obj.delete_button

            validation_button.clicked.connect(
                self.on_validation_button_clicked)

            delete_button.clicked.connect(self.on_delete_button_clicked)

    def __make_checkbox(self):

        checkbox = QTableWidgetItem()
        checkbox.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
        checkbox.setCheckState(Qt.Unchecked)

        return checkbox

    def add_item(self, account):
        row = self.table_list.rowCount()
        self.table_list.insertRow(row)

        chkbox = self.__make_checkbox()

        self.table_list.setItem(
            row, 0, chkbox)

        self.table_list.setItem(
            row, 1, MyTableWidgetItem(account[0]))

        self.table_list.setItem(
            row, 2, MyTableWidgetItem(account[1]))

        self.table_list.setItem(
            row, 3, MyTableWidgetItem(self.VALID[False]))

        qitem = (self.table_list.item(row, 1), self.table_list.item(row, 2))

        for idx in range(2):
            self.__set_table_item_tooptip(qitem[idx], account[idx])

    def __set_table_item_tooptip(self, qitem, account):
        qitem.setToolTip(account)

    def __get_checked_items(self):
        t = self.table_list

        checkedItems = [(t.item(row, 1).text(), t.item(row, 2).text())
                        for row in range(t.rowCount()) if t.item(row, 0).checkState() == Qt.Checked]

        return checkedItems

    @pyqtSlot()
    def on_delete_button_clicked(self):

        qtable = self.table_list
        row = []

        for index in range(qtable.rowCount()):
            if qtable.item(index, 0).checkState() == Qt.Checked:
                row.append(index)

        row = tuple(row)

        for index in sorted(row, reverse=True):
            qtable.removeRow(index)
            del self.account_list[index]

    @pyqtSlot(tuple)
    def onAccountSent(self, account):

        if self.max_account_len > len(self.account_list):

            self.account_list.append(account)
            self.add_item(account)

        else:
            title = "Information"
            text = "최대 {}개의 계정만 추가 하실 수 있습니다.".format(self.max_account_len)
            reply = QMessageBox.warning(self, title, text)

    @pyqtSlot()
    def on_validation_button_clicked(self):

        items = self.__get_checked_items()
        print(items)