如何通过QToolBar按钮执行函数?PyQt5属性错误求助
问题原因分析
你遇到的'NoneType'对象没有'actionTriggered'属性错误,核心原因是混淆了QToolBar和QAction的对象名称:
- 你用
findChild(QToolBar, "actionfff")查找对象,但"actionfff"是QT Designer中创建的QAction的对象名,不是QToolBar的对象名,导致查找失败返回None,后续调用actionTriggered自然报错。
两种解决方案
根据你的需求,分两种情况修正:
方案一:监听特定QAction的点击事件
如果目标是触发名为"actionfff"的按钮动作,直接查找QAction对象并连接triggered信号:
from PyQt5.QtWidgets import QMainWindow, QApplication, QToolBar, QAction from PyQt5 import uic import sys class UI(QMainWindow): def __init__(self): super(UI,self).__init__() uic.loadUi("TTTT.ui",self) # 查找QAction对象,类型改为QAction self.action_fff = self.findChild(QAction, "actionfff") # 连接QAction的triggered信号 self.action_fff.triggered.connect(self.T) self.show() def T(self): print("mmmmm") app = QApplication(sys.argv) UIWindow = UI() app.exec_()
方案二:监听整个QToolBar的所有Action触发事件
如果要监听某个ToolBar内所有Action的触发,需要先找到正确的QToolBar对象(比如QT Designer中给ToolBar设置的对象名,默认可能是"toolBar"),再连接actionTriggered信号:
from PyQt5.QtWidgets import QMainWindow, QApplication, QToolBar, QAction from PyQt5 import uic import sys class UI(QMainWindow): def __init__(self): super(UI,self).__init__() uic.loadUi("TTTT.ui",self) # 查找QToolBar对象,使用ToolBar的对象名(替换成你实际的名称) self.tbar = self.findChild(QToolBar, "toolBar") # 连接ToolBar的actionTriggered信号,槽函数可接收触发的QAction参数 self.tbar.actionTriggered.connect(self.T) self.show() def T(self, action): # 可以打印触发的Action名称,方便调试 print(f"触发了Action: {action.text()}") print("mmmmm") app = QApplication(sys.argv) UIWindow = UI() app.exec_()
额外注意事项
- 可以打开QT Designer的
对象查看器(View -> Object Inspector),确认每个控件的对象名称和类型,避免查找时类型和名称不匹配。 - 建议将
self.show()放在初始化逻辑的最后,确保所有控件都加载完成后再显示窗口。
内容的提问来源于stack exchange,提问作者wolfino6565
相关产品推荐
相关产品推荐

