AttributeError: ‘PySide2.QtWidgets.QWidget’ object has no attribute 'Button_copy’背后的原因居然是???
前文
Python GUI初学者计划1——PySide2和PyQt5库的安装
Python GUI初学者计划2——手写代码的方式实现PySide2界面设计(详细讲解内部联系)
Python GUI初学者计划3——动态加载UI的方式实现PySide2界面设计(详细讲解内部联系)
当我用PySide2设计界面时候,设置了两个按钮,分别实现:
1、开玩笑
2、复制文本
两个功能。
但我运行代码的时候只有一个按键可以用,另一个则一直提示:
AttributeError: 'PySide2.QtWidgets.QWidget' object has no attribute 'Button_copy'
解决问题的过程:
1、我将按钮对象的名字改了又改:
2、不断将新的UI保存、刷新、另存为还是不行
但是一直报错。。。。。
3、难道是按钮对象只能有一个,后来的都无效?
我将第一个初始的按钮同时代表连接两个函数:
self.ui.Button_jok.clicked.connect(self.yahoo)
self.ui.Button_jok.clicked.connect(self.copy_text)
竟然可以运行!!!!!!脑瓜子嗡嗡嗡的
开玩笑功能!!!
紧接着第二个弹窗:
这什么道理,一个按键可以,两个按键不行?也没听说PySide2有这个BUG,那一定是我哪个地方出问题了!!!
转换思维,验证想法!!!
为了验证我第二个按键的存在是否合理,我做了两个实验:
1:修改第二个按键的对象名
2:删除第二个按键
观察这个.ui文件的.XML 代码,果然发现了猫腻!
修改按键对象名:
删除第二个按键:
然鹅…它的.XML文件的信息一直没变动,尽管我一直保存.ui 文件。(可能是因为我之前执行过直接讲.ui文件转换为.py文件过的原因!!!)
发现问题,解决问题!!!
尽管.XML文件会显示更新
即是点击【是(Y)】:
.XML文件的按键对象名还是没改!!!老忽悠了······
既然找到问题了,那就好解决了,直接讲.XML中的控件对象名改了了即可:
这样一一对应起来,保存之后重新运行代码!!!
-----------------------------------------------------
The End 果然不报错了!!!
两个按键分别能实现自己的功能了:
编程使我快乐!!!
写在最后:
你要相信大多数人与人之间的差距并不大,但是0.99的N次方和1.1的N次方差距是随着N多增多而越来越大的;坚定的目标和持久的努力一定会成功!
你偷过的每一个懒,都会成为你日后最深的遗憾。
我是通信不二,一个积极努力,乐观向上的程序猿!!!