问一个十分基础的问题, Python 类调用 pyqt 自定义组件类传参 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ALLROBOT

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

  •  
  •   ALLROBOT Mar 30, 2022 2620 views
    This topic created in 1490 days ago, the information mentioned may be changed or developed.

    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 的,基础不太好

    im67
        1
    im67  
       Mar 31, 2022
    module() takes at most 2 arguments (3 given):某个类只需要 2 个参数,但是给了 3 个
    ALLROBOT
        2
    ALLROBOT  
    OP
       Mar 31, 2022
    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
        3
    ALLROBOT  
    OP
       Mar 31, 2022
    屮,有图片没法上传,请不要在每一个回复中都包括外链,这看起来像是在 spamming ,太影响人心态了吧
    weyou
        4
    weyou  
       Mar 31, 2022 via Android   1
    class Ui_Form(Show_EMG)
    模块当成类来继承?
    这代码实在是太乱了,看着辣眼睛
    passMeBy
        5
    passMeBy  
       Mar 31, 2022
    是不是参数传递的是元组,没有用()包起来
    lookStupiToForce
        6
    lookStupiToForce  
       Mar 31, 2022
    你确定是"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
        7
    ALLROBOT  
    OP
       Mar 31, 2022
    @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
        8
    lookStupiToForce  
       Mar 31, 2022
    真的是太乱了,不知道你是文件命名有重复还是咋滴,单独看这两个文件居然还有互相调用?这样很容易导致各种意料外的问题,建议如果真有互相调用,先去除互相调用确认继承依赖关系,把要调用的公共模块再独立出来成一个新的文件
    然后你发现没,报错已经不同了,所以不贴新的 traceback 信息我们也不清楚是啥引起的。而且也没在你的 main_plot.py 里找到 EMG 这个变量(你在 Show_EMG.py 引用的它),贴就贴全好伐?
    ALLROBOT
        9
    ALLROBOT  
    OP
       Mar 31, 2022
    @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
        10
    ALLROBOT  
    OP
       Mar 31, 2022
    我加下线程看看能解决自我崩溃不
    ec0
        11
    ec0  
       Mar 31, 2022
    我试着运行了一下代码
    发现程序未响应
    因为你在 Show_EMG.py 的 initUI 函数里的 self.timer.start(10) 设置的 10 毫秒,太短了
    改成 100 程序就不会未响应了
    ALLROBOT
        12
    ALLROBOT  
    OP
       Mar 31, 2022
    @ec0 #11 好吧。。。刷新率太快会使程序自我崩溃,感谢指出错误之处,本贴终结
    About     Help     Advertise     Blog     API     FAQ     Solana     2978 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 60ms UTC 15:03 PVG 23:03 LAX 08:03 JFK 11:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86