【问题标题】:PySide2 : AttributeError: 'NoneType' object has no attribute 'objectName'PySide2:AttributeError:“NoneType”对象没有属性“objectName”
【发布时间】:2021-06-16 03:41:40
【问题描述】:

我该如何解决这个错误:

Traceback(最近一次调用最后一次):

文件“”,第 32 行,在 run_setup_turn_table 中

AttributeError: 'NoneType' 对象没有属性 'objectName'

from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
import sys

class mk_preview_UI(QWidget):
    def __init__(self):
        super(mk_preview_UI,self).__init__()
        
        self.UI()
        self.layout()
        self.show()
    def UI(self):
        self.setup_turnTable = QPushButton("Setup turn table")
        self.setup_turnTable.setObjectName("run_setup_btn")
        
    def layout(self):
        self.main_layout = QVBoxLayout()
        self.main_layout.addWidget(self.setup_turnTable)
        self.setLayout(self.main_layout)



class run_ui:
    def __init__(self):
        self.MainWindow = mk_preview_UI()
        self.MainWindow.setup_turnTable.clicked.connect(self.run_setup_turn_table)

    def run_setup_turn_table(self):
        run_button = self.MainWindow.sender()
        if run_button.objectName() == "run_setup_btn":
           print "run_setup_btn"       
        


if __name__ == "__main__":
    app = QApplication(sys.argv)
    MainWindow = run_ui()
    sys.exit(app.exec_())

【问题讨论】:

  • 这意味着run_button 的类型为NoneType。你的问题在MainWindow.sender()
  • 当我在“mk_preview_UI”类中设置点击信号时效果很好:

标签: python pyside pyside2


【解决方案1】:

注意:似乎是 PySide2 错误。

如果一个 QObject 发出信号并调用另一个 QObject 的方法,那么接收器对象的 sender() 将返回发射器对象。在您的情况下, MainWindow 不是接收者,因此 sender() 不会返回发出信号的对象。一种解决方法是将 run_ui 设置为 QObject,并且由于 run_setup_turn_table 方法属于它,因此 sender() 将返回按钮。

class run_ui(QObject):
    def __init__(self):
        super().__init__()
        self.MainWindow = mk_preview_UI()
        self.MainWindow.setup_turnTable.clicked.connect(self.run_setup_turn_table)

    def run_setup_turn_table(self):
        run_button = self.sender()
        if run_button.objectName() == "run_setup_btn":
            print("run_setup_btn")

【讨论】:

  • 这是另一个有趣的不一致,在 PyQt5 中它工作正常。
  • @musicamante 是的,我刚刚检查过。另一个 PySide2 错误
  • 你的回答就够了,我觉得发布完整代码会有帮助。
  • @K4341 不,它根本没有帮助,因为:1)它只是没有解释的代码,2)它可以很容易地从我的回答中推断出来。
猜你喜欢
  • 2019-01-01
  • 2021-12-26
  • 2019-07-23
  • 2018-05-13
  • 2020-09-07
  • 2017-05-03
  • 2023-03-16
  • 2018-07-14
  • 2013-06-16
相关资源
最近更新 更多