错误 "bool object has no attribute" python 消息



我有一个getFile函数,它将获取csv文件的地址并在命令控制台中打印文件名。当我在主窗口中运行该函数时,我不断得到"'bool'对象没有属性'文件名'"。为什么会这样?

ttreadfile.py

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
def getFile(self):
"""this function will get the address of the sdv file location"""
self.filename = QFileDialog.getOpenFileName(filter = "csv (*.csv)")[0]
print("File:",self.filename)

ttool.py

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from Module.ttreadfile import *
class ApplicationWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
"""set layout of window"""
self.main_widget = QWidget(self)
l = QGridLayout(self.main_widget)
open_button =QPushButton('Open')
open_button.clicked.connect(getFile)
l.addWidget(open_button, 0,0)
if __name__ == '__main__':
app = QApplication(sys.argv)
aw = ApplicationWindow()
aw.setWindowTitle("PyQt5 Matplot Example")
aw.show()
#sys.exit(qApp.exec_())
app.exec_()

QPushButton小部件继承了QAbstractButtonclicked信号,也是QCheckBox的父类。 因此,当发出clicked信号时,将使用默认的checked布尔参数发送,该参数指示按钮的检查状态。对于QPushButton,此参数始终为 False,并且在连接到信号的插槽中经常被忽略或省略。

在您的情况下发生的情况是,getFile函数的self参数正在填充checked参数的值,该参数是一个布尔值,因此没有filename属性。

此外,由于getFile不是ApplicationWindow类的方法,因此它不会收到self,因为它是默认的第一个参数,就像您调用self.getFile一样。

解决方法是简单地将单击的信号分配给可以使用适当参数触发getFile函数的中间方法。

例如

class ApplicationWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
...
open_button.clicked.connect(self.get_file)
def get_file(self):
getFile(self)

或者按照注释中的建议,您可以简单地使用 lambda 来触发函数:

open_button.clicked.connect(lambda : getFile(self))

我还建议更改 getFile 函数的签名,以便清晰和可读。

例如:

def getFile(instance):
"""this function will get the address of the sdv file location"""
instance.filename = QFileDialog.getOpenFileName(filter = "csv (*.csv)")[0]
print("File:",instance.filename)

相关内容

最新更新