Pyside6,tableView.selectedIndexes,列表索引超出范围

问题描述 投票:0回答:1

在此代码中,函数必须采用一个索引,然后将其删除。问题出在delete_current_transaction中,pycharm说(index = self.ui.tableView.selectedIndexes()[0]) 列表索引超出范围
Edit_current_transaction 也必须只采用一个类别。但它不会给出这种类型的错误

    def edit_current_transaction(self):
        index = self.ui.tableView.selectedIndexes()[0]
        id = str(self.ui.tableView.model().data(index))

        date = self.ui_window.dataEdit.text()
        category = self.ui_window.cb_chose_category.currentText()
        description = self.ui_window.le.description.text()
        balance = self.ui_window.le_balance.text()
        status = self.ui_window.cb_status.currentText()

        self.conn.update_transaction_query(date, category, description, balance, status, id)

        self.view_data()
        self.new_window.close()

    def delete_current_transaction(self):
        index = self.ui.tableView.selectedIndexes()[0]
        id = str(self.ui.tableView.model().data(index))

        self.conn.delete_transaction_query(id)

        self.view_data()
        self.new_window.close()

此函数是 mainapp 类的一部分

class MoneyManager(QMainWindow):
    def __init__(self):
        super(MoneyManager, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUI(self)
        self.conn = Data()
        self.view_data()

        self.ui.NewTransButton.clicked.connect(self.open_new_transaction_window)
        self.ui.EditTransButton.clicked.connect(self.open_new_transaction_window)
        self.ui.DeleteTransButton.clicked.connect(self.delete_current_transaction())

    def open_new_transaction_window(self):
        self.new_window = QtWidgets.QDialog()
        self.ui_window = Ui_New_Transaction_window()
        self.ui_window.setupUi(self.new_window)
        self.new_window.show()
        sender = self.sender()

        if sender.text() == "New transaction":
            self.ui_window.NewTransButton.clicked.connection(self.add_new_transaction)
        else:
            self.ui_window.EditTransButton.clicked.connection(self.edit_current_transaction)

    def delete_current_transaction(self):
        index = self.ui.tableView.selectedIndexes()[0]
        id = str(self.ui.tableView.model().data(index))

        self.conn.delete_transaction_query(id)

        self.view_data()
        self.new_window.close()

它从连接获取数据。提供该函数数据的函数

def delete_transaction_query(self, id):
    sql_query = "DELETE FROM expenses WHERE ID=?"
    self.execute_query_with_params(sql_query, [id])
python-3.x indexing qtableview pyside6
1个回答
0
投票

也许问题在于:

class MoneyManager(QMainWindow):
    def __init__(self):
        //....other code 
        self.ui.DeleteTransButton.clicked.connect(self.delete_current_transaction())

去掉delete_current_transaction末尾的括号,我们只想传递该方法,而不是调用它。

self.ui.DeleteTransButton.clicked.connect(self.delete_current_transaction)
© www.soinside.com 2019 - 2024. All rights reserved.