问一个十分基础的问题, Python 类调用 pyqt 自定义组件类传参

2022-03-30 23:49:07 +08:00
 ALLROBOT

python 基础烂,pyqt 写一个界面调用自定义组件,结果 Pycharm 提示传参错误

自定义组件类部分代码,Show_EMG.py

from PyQt5 import QtCore
from PyQt5.QtWidgets import QWidget
from pyqtgraph import PlotWidget
import pyqtgraph as pg
import numpy as np


# 绘图组件,输出 5~550 范围的数值
class Plot_Show(QWidget):
    '''
    定义绘图时的参数:QWidget 、组件 y 作标、组件 x 作标、y 轴数据、组件宽高、组件对象文本
    Form,y,x,data,length = 1800, width = 250, high = 120, text = "sEMG Voltage"
    '''
    def __init__(self,Form,y,x,data,**kwargs):
        super().__init__(self,**kwargs)
        # length = 1800, width = 250, high = 120, text = "sEMG Voltage"
        self.Form=Form
        self.y=y
        self.x=x
        self.data=data
        self.length={"length":kwargs["length"] if kwargs.__contains__("length") else 1800}
        self.width={"width":kwargs["width"] if kwargs.__contains__("width") else 250}
        self.high={"high":kwargs["high"] if kwargs.__contains__("high") else 120}
        self.text={"text":kwargs["text"] if kwargs.__contains__("text") else "sEMG Voltage"}
        self.initUI()
     def xxx
     	....

在别的类内实例化组件类并传参,main_plot.py

from main_plot import EMG
from pyqtgraph import PlotWidget
import pyqtgraph as pg
import numpy as np
from PyQt5 import QtCore


class Plot_Show(object):
    '''
    绘图组件,输出 5~550 范围的数值
    定义绘图时的参数:QWidget 、组件 y 作标、组件 x 作标、y 轴数据、组件宽高、组件对象文本
    Form,y,x,data,length = 1800, width = 250, high = 120, text = "sEMG Voltage"
    '''
    def __init__(self,Form,y,x,data,**kwargs):
        super().__init__(self,**kwargs)
        # length = 1800, width = 250, high = 120, text = "sEMG Voltage"
        self.Form=Form
        self.y=y
        self.x=x
        self.data=EMG()[data]
        self.length={"length":kwargs["length"] if kwargs.__contains__("length") else 1800}
        self.width={"width":kwargs["width"] if kwargs.__contains__("width") else 250}
        self.high={"high":kwargs["high"] if kwargs.__contains__("high") else 120}
        self.text={"text":kwargs["text"] if kwargs.__contains__("text") else "sEMG Voltage"}
        ....

结果报错:

Traceback (most recent call last):
  File "C:\Users\Administrator\PycharmProjects\pythonProject\main_plot.py", line 13, in <module>
    import Show_EMG
  File "C:\Users\Administrator\PycharmProjects\pythonProject\Show_EMG.py", line 1, in <module>
    from main_plot import EMG
  File "C:\Users\Administrator\PycharmProjects\pythonProject\main_plot.py", line 87, in <module>
    class Ui_Form(Show_EMG):
TypeError: module() takes at most 2 arguments (3 given)

是类的继承关系吗,不太明白怎么改,我自学 python 的,基础不太好😂

2017 次点击
所在节点    Python
12 条回复
im67
2022-03-31 00:51:59 +08:00
module() takes at most 2 arguments (3 given):某个类只需要 2 个参数,但是给了 3 个
ALLROBOT
2022-03-31 00:58:45 +08:00
Show_EMG.py 贴错代码了

import Show_EMG
from PyQt5 import QtCore, QtWidgets
class Ui_Form(Show_EMG):
def __init__(self):
super().__init__()
self.setupUi(self)



def setupUi(self, Form):
Form.resize(820, 454)
Form.setObjectName("Form")
self.plot1= Show_EMG.Plot_Show(Form=Form,y=10, x=10, data=0, text="sEMG1")
ALLROBOT
2022-03-31 01:10:47 +08:00
屮,有图片没法上传,请不要在每一个回复中都包括外链,这看起来像是在 spamming ,太影响人心态了吧
weyou
2022-03-31 01:53:38 +08:00
class Ui_Form(Show_EMG)
模块当成类来继承?
这代码实在是太乱了,看着辣眼睛
passMeBy
2022-03-31 08:57:30 +08:00
是不是参数传递的是元组,没有用()包起来
lookStupiToForce
2022-03-31 10:49:25 +08:00
你确定是"import Show_EMG || class A(Show_EMG)"
而不是"from Show_EMG import Plot_Show|| class A(Plot_Show)"或者直接 class A(Show_EMG.Plot_Show) ?

从一个模块文件继承,我还真没见过这种用法
你要不然搜搜 stackoverflow ?
ALLROBOT
2022-03-31 11:48:49 +08:00
@lookStupiToForce #6 @passMeBy #5 @weyou #4

我太菜了,对不起,下次一定看看 python 补补基础😥我把继承取消了,改 object ,直接实例化自定义组件类,结果还是报错,提示 TypeError: arguments did not match any overloaded call:
https://gist.github.com/allrobot/adba1172ac27c260c139ca2aa06206b5

https://gist.github.com/allrobot/24c250d16edb8b848c4f2168cd1fad5e
lookStupiToForce
2022-03-31 12:08:04 +08:00
真的是太乱了,不知道你是文件命名有重复还是咋滴,单独看这两个文件居然还有互相调用?这样很容易导致各种意料外的问题,建议如果真有互相调用,先去除互相调用确认继承依赖关系,把要调用的公共模块再独立出来成一个新的文件
然后你发现没,报错已经不同了,所以不贴新的 traceback 信息我们也不清楚是啥引起的。而且也没在你的 main_plot.py 里找到 EMG 这个变量(你在 Show_EMG.py 引用的它),贴就贴全好伐?
ALLROBOT
2022-03-31 12:59:53 +08:00
@lookStupiToForce #8 不好意思,我把调用的公共模块独立成新的文件了( EMG 暂时默认为 0 )

把 Show_EMG 的**kwargs 参数去掉了,总算跑通(虽然跑了一会儿就自我崩溃了)😧

ble.py 蓝牙读取的值暂存 EMG 数组,main_plot.py 实例化 Show_EMG 绘图类并输出,Show_EMG 类读取 ble.py 的蓝牙值

ble.py
https://gist.github.com/allrobot/1547447f313942f278118cb2e569f59f

Show_EMG
https://gist.github.com/allrobot/c2544b5de7afdbbbfc89c9d476fc5b6c

main_plot.py
https://gist.github.com/allrobot/d971747af566871f4a039d99fdb9335f
ALLROBOT
2022-03-31 13:04:47 +08:00
我加下线程看看能解决自我崩溃不
ec0
2022-03-31 16:01:18 +08:00
我试着运行了一下代码
发现程序未响应
因为你在 Show_EMG.py 的 initUI 函数里的 self.timer.start(10) 设置的 10 毫秒,太短了
改成 100 程序就不会未响应了
ALLROBOT
2022-03-31 20:34:57 +08:00
@ec0 #11 好吧。。。刷新率太快会使程序自我崩溃,感谢指出错误之处,本贴终结

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/843983

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX