AttributeError: ‘PySide2.QtWidgets.QMainWindow’ object has no attribute ‘button’”如何解决

今天跟着b站的老师练习pyside2中的一点内容——如何加载已搭建好的ui文件,并赋予其实际功能时出错了,刚开始我是完全加载不出来那个搭建好的页面,之后,我仔细查看代码,发现‘parts = line.split(' ')#易错点’括号里的空格并没打出来,影响了它的划分;
from PySide2.QtWidgets import QApplication, QMessageBox 
from PySide2.QtUiTools import QUiLoader 
class Stats: def __init__(self): 
# 从文件中加载UI定义 # 从 UI 定义中动态 创建一个相应的窗口对象 # 注意:里面的控件对象也成为窗口对象的属性了 # 比如 self.ui.button , 
self.ui.textEdit self.ui = QUiLoader().load('main.ui') 
self.ui.button.clicked.connect(self.handleCalc) 
def handleCalc(self): 
info = self.ui.textEdit.toPlainText() 
salary_above_20k = ' ' 
salary_below_20k = ' ' 
for line in info.splitlines(): 
if not line.strip(): 
continue 
parts = line.split(' ') 
parts = [p for p in parts if p] 
name,salary,age = parts 
if int(salary) >= 20000: 
salary_above_20k += name + '\n' 
else: 
salary_below_20k += name + '\n' QMessageBox.about(self.ui, '统计结果', f'''薪资20000 以上的有:\n{salary_above_20k} \n薪资20000 以下的有:\n{salary_below_20k}''' ) 
app = QApplication([]) 
stats = Stats() 
stats.ui.show() app.exec_()
本来的代码如上,但它提示我‘self.ui.button.clicked.connect(self.handleCalc) ’这一句出错了,出错的原因是没有button这个方法,然后我想是不是我用的button出了问题,应该要用按钮的具体类别,例如把button改为pushbutton(因为这个错误特地把ui文件转成了代码,

db3567d5f02b4a669871cbb03b8281f0.png

 

发现确实是,改完它就可以显示出对应的窗口了。

窗口显示出来后,它又出问题了——窗体不给我编辑,反正不能输入,
点开ui源文件发现,原来是我用错按钮了,用力textbrowser——这个按钮不可编辑,所以我赶紧换回了plainTextEdit,最后终于实现了相应的功能。

最后,总结下今天遇到的问题及对应的解决办法:
1、不能加载出窗口
(1)首先检查文件路径有无写错;
(2)然后检查你的button类有没有用错(因为这不是从头到尾写代码,我们是在Qt-designer上进行拖拽构造的页面,然后直接加载的,所以写到button时要特别注意,可能不仅仅是button,要写具体类,如pushbutton;
(3)最后是窗口加载出来,但编辑框不能编辑,检查一下自己是不是用成了textBrowser(只能浏览不能编辑),改回来,普通的框用plainTextEdit就可以了

  • 27
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值