You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 13:12:15