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

Cython编译PyQt5代码为pyd后运行出现参数不匹配错误求助

TypeError: on_button_click() takes exactly 1 positional argument (2 given) 错误原因与解决办法

错误根源

PyQt的QPushButton.clicked信号默认会传递一个布尔类型参数(用于标识按钮是否处于选中状态,普通按钮也会触发该参数传递)。在纯Python环境中,解释器会自动忽略函数定义之外的多余位置参数,因此你的代码可以正常运行;但经过Cython编译为pyd扩展后,Cython对函数参数的校验机制更严格,会强制检查传入参数的数量与函数定义完全匹配,因此触发了这个类型错误。

解决方案

只需修改on_button_click方法的定义,使其能够接收信号传递的额外参数即可,有两种常见方式:

  1. 显式添加参数(即使你不需要使用该参数):
def on_button_click(self, checked=False):
    print('clicked.')
  1. 使用可变参数接收任意多余参数:
def on_button_click(self, *args):
    print('clicked.')

补充说明

你更换Visual Studio版本、降级Cython后问题仍存在,是因为该错误与编译环境版本无关,核心原因是信号传递的参数和方法定义不匹配,和编译工具链没有关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:24:57