我一直收到这个错误,我有点卡住了。我知道它与最后一段代码有关,但除此之外,我很困惑,而且我不确定如何修复它/实现修复。
调用Panel的部分(可视选项菜单的一部分):
self.AutojoinMemosPanel = GUI.Options.Panels.AutojoinMemos.Panel(self.config,self)
self.pages.addWidget(self.AutojoinMemosPanel)
面板:
from PyQt4 import QtCore
from PyQt4 import QtGui
class MemoEntryItem(QtGui.QListWidgetItem):
def __init__(self,MemoName):
QtGui.QListWidgetItem.__init__(self,MemoName)
self.MemoName = MemoName
class Panel(QtGui.QWidget):
def __init__(self,Config,userprofile):
QtGui.QWidget.__init__(self)
self.Config = Config
self.AutoIdentifyCheck = QtGui.QCheckBox("Automatically identify with nickserv")
self.PasswordLabel = QtGui.QLabel("Password:")
self.PasswordEntry = QtGui.QLineEdit()
self.PasswordEntry.setEchoMode(QtGui.QLineEdit.Password)
self.TitleLabel = QtGui.QLabel("Memos to join on startup:")
self.MemosList = QtGui.QListWidget()
self.MemoNameEntry = QtGui.QLineEdit()
self.RemoveButton = QtGui.QPushButton("REMOVE")
self.AddButton = QtGui.QPushButton("ADD")
Layout = QtGui.QVBoxLayout(self)
Layout.setAlignment(QtCore.Qt.AlignTop)
Layout.addWidget(self.AutoIdentifyCheck)
NickservPasswordLayout = QtGui.QHBoxLayout()
NickservPasswordLayout.addWidget(self.PasswordLabel)
NickservPasswordLayout.addWidget(self.PasswordEntry)
Layout.addLayout(NickservPasswordLayout)
Layout.addWidget(self.TitleLabel)
Layout.addWidget(self.MemosList)
Layout.addWidget(self.MemoNameEntry)
AddRemoveButtonLayout = QtGui.QHBoxLayout()
AddRemoveButtonLayout.addWidget(self.RemoveButton)
AddRemoveButtonLayout.addWidget(self.AddButton)
Layout.addLayout(AddRemoveButtonLayout)
self.connect(self.RemoveButton,QtCore.SIGNAL("clicked()"),self,QtCore.SLOT("RemoveSelectedMemo()"))
self.connect(self.AddButton,QtCore.SIGNAL("clicked()"),self,QtCore.SLOT("AddMemoFromTextEntry()"))
if self.Config.userprofile.userprofile.get("AutoIdentify",False):
self.AutoIdentifyCheck.setChecked(True)
self.PasswordEntry.setText(self.Config.userprofile.userprofile.get("NickservPassword",""))
for MemoName in self.Config.config.get("AutojoinMemos",[]):
self.AddMemoEntry(MemoName)
@QtCore.pyqtSlot()
def RemoveSelectedMemo(self):
self.MemosList.takeItem(self.MemosList.currentRow())
@QtCore.pyqtSlot()
def AddMemoFromTextEntry(self):
MemoName = str(self.MemoNameEntry.text()).strip()
if (MemoName != ""):
self.AddMemoEntry(MemoName)
self.MemoNameEntry.setText("")
def AddMemoEntry(self,MemoName):
self.MemosList.addItem(MemoEntryItem(MemoName))
def SaveOptions(self):
MemosListed = []
for MemoIndex in range(self.MemosList.count()):
MemoItem = self.MemosList.item(MemoIndex)
MemosListed.append(MemoItem.MemoName)
self.Config.set("AutojoinMemos",MemosListed)
self.Config.userprofile.userprofile["AutoIdentify"] = self.AutoIdentifyCheck.isChecked()
self.Config.userprofile.userprofile["NickservPassword"] = str(self.PasswordEntry.text())
self.Config.userprofile.save()
任何帮助?
答案 0 :(得分:3)
首先想到的是,这里可能会发生两件事之一。经过深入检查,只有一个。
我们假设,由于您没有明确说明,有问题的行是:
if self.Config.userprofile.userprofile.get("AutoIdentify",False):
然后当你收到错误
AttributeError: 'NoneType' object has no attribute 'userprofile'
表示您正在尝试访问不存在的属性(这是has no attribute 'userprofile'
背后的含义),并且您正在检查属性的对象不是存在,因为不存在的对象的类型是NoneType
(这是'NoneType' object
背后的含义)。
因此,要进行调试,您需要查找访问userprofile
的对象可能是None
(即未分配或为空)的可能性。
self.Config.userprofile #1
和
self.Config.userprofile.userprofile #2
在#1中,如果Config的值为None
,则self.Config.userprofile
将抛出该AttributeError,因为Config
是NoneType
对象,因此没有属性 - -let一个userprofile
属性。
如果 userprofile
的{{1}} 的值为self.Congig
,则在#2中,None
将抛出该AttributeError,因为{{1} }是一个self.Config.userprofile.userprofile
对象,因此也没有属性。
但是,您可以删除这两个选项中的一个。
考虑一下,#2永远不会抛出此错误,因为如果对象userprofile
的属性NoneType
为userprofile
(如上所述),那么您首先会抛出不同的错误错误:
self.Config
如果None
对象 具有属性AttributeError: 'Config' object has no attribute 'userprofile'
,那么您将收到错误:
Config
因此,userprofile
必须为AttributeError: 'userprofile' object has no attribute 'userprofile'
,这意味着您没有将Config
的值传递给None
。
希望这有助于解决您的问题并自行调试!