You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySide6桌面应用:刷新按钮调用MariaDB数据时遇参数错误

解决PySide6按钮点击报错TypeError问题

问题核心原因

报错TypeError: MainWindow.on_refreshBtn_clicked() takes 1 positional argument but 2 were given是因为槽函数的参数和信号传递的参数不匹配:

  • 你用@Slot(bool)声明槽函数接收一个布尔值参数,但实际定义的on_refreshBtn_clicked(self)只接受self这一个参数。
  • QPushButton的clicked信号默认会传递一个checked布尔参数(表示按钮是否处于按下状态),当信号触发时会把这个参数传给槽函数,导致参数数量不匹配。

两种修复方案

方案1:匹配信号参数,修改槽函数定义

保留@Slot(bool),给槽函数添加对应的参数:

@Slot(bool)
def on_refreshBtn_clicked(self, checked):
    result = Connectionmaria().get_data_from_store_db()
    if result:
        self.storeTree.setRowCount(len(result))
        for row, item in enumerate(result):
            column_1_item = QTableWidgetItem(str(item['column 1']))
            self.storeTree.setItem(row, 0, column_1_item)
    else:
        QMessageBox.information(self, 'Warning', 'No data gotten from database')
        return

方案2:移除不必要的参数声明

如果你不需要checked参数,直接修改@Slot装饰器为无参数形式:

@Slot()
def on_refreshBtn_clicked(self):
    # 原有代码不变

代码中其他需要修复的问题

  1. 重复定义方法:Connectionmaria类里重复写了两次get_data_from_store_db,保留其中一个即可。
  2. 数据库连接未实际关闭:finally块里的self.con.close要改为self.con.close(),否则只是引用方法,不会执行关闭操作。
  3. 拼写错误:QMessageBox.informaation应为QMessageBox.information。
  4. 异常排查优化:建议在except块打印具体错误信息,便于排查数据库连接或查询问题。

修正后的Connectionmaria类示例

class Connectionmaria():
    def __init__(self):
        print("yes 9")
        self.host = "127.0.0.1"
        self.user = "root"
        self.password = "518Oloko."
        self.port = 3306
        self.database = "Labpal"
        self.con = None

    def connect(self):
        self.con = mariadb.connect(
            host=self.host,
            user=self.user,
            password=self.password,
            port=self.port,
            database=self.database
        )

    def get_data_from_store_db(self):
        try:
            self.connect()
            cursor = self.con.cursor(dictionary=True)
            sql = "SELECT * FROM store_log"
            cursor.execute(sql)
            result = cursor.fetchall()
            return result
        except Exception as e:
            print(f"get data failed: {e}")
        finally:
            if self.con:
                self.con.close()

内容的提问来源于stack exchange,提问作者lorkor_blaq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 21:20:35