Python 类对象列表不起作用
我编写了一个方法,其中我使用了一个名为Python 类对象列表不起作用,python,list,pyqt4,Python,List,Pyqt4,我编写了一个方法,其中我使用了一个名为channelcount的全局变量和两个名为listofchannels\u 1和listofchannels\u 2的列表。当我按下组合键(ctrl+shift+c)时,一个名为ViewWidget的类对象(这是matplotlib图)显示在我的QMainWindow中。这样的情况最多有3次。您可以在此图像中看到: 我想将这个类对象添加到listofchannels_1中,同时在listofchannels_2中添加对象的名称,例如:“Channel 1
channelcount
的全局变量和两个名为listofchannels\u 1
和listofchannels\u 2
的列表。当我按下组合键(ctrl+shift+c)时,一个名为ViewWidget
的类对象(这是matplotlib图)显示在我的QMainWindow
中。这样的情况最多有3次。您可以在此图像中看到:
我想将这个类对象添加到listofchannels_1
中,同时在listofchannels_2
中添加对象的名称,例如:“Channel 1、Channel 2和Channel 3”
这是我写的方法(addChannel):
现在,我得到了一个错误:“窗口”对象没有属性channelCount
。我写错了什么
我如何知道我是否正在将图形(i)
添加到频道列表_1
--------编辑2------------
它终于起作用了。这是最终代码:
class Window(QMainWindow):
channelCount = 0
listofchannels_1 = []
listofchannels_2 = []
def __init__(self):
#A lot of stuff in here
def addChannel(self):
graphic = ViewWidget()
if Window.channelCount <= 2: #Sólo agregaremos hasta 3 canales
self.splitter.addWidget(graphic)
Window.channelCount += 1
Window.listofchannels_1.append(graphic)
channel_name = "Channel " + str(Window.channelCount)
Window.listofchannels_2.append(channel_name)
print channel_name
print Window.listofchannels_1
print Window.listofchannels_2
return Window.channelCount
类窗口(QMainWindow):
channelCount=0
通道列表_1=[]
通道列表_2=[]
定义初始化(自):
#这里有很多东西
def addChannel(自):
graphic=ViewWidget()
如果Window.channelCount我可以看到一些错误
首先,“return”语句将结束函数并返回值。函数中途有一个return语句意味着函数的其余部分永远不会执行。如果要在函数完成后返回某些内容,请将其放在函数的末尾
在下面的代码块中,我看不到名为channel\u name
的变量,您必须先创建它,然后才能开始
for i in listofchannels_1:
listofchannels_1.append(graphic(i))
for channel in listofchannels_2:
channel_name[i] = "Channel" + str(channelCount)
print channel_name[i]
如果通道列表仅在window类中使用,那么将其作为类的成员而不是全局成员可能是值得的。您可以使用self.variableName设置和访问它们,如中所示:
Class Window (QMainWindow):
def __init__(self):
self.channelCount = 1
self.listofchannels_1 = []
self.listofchannels_2 = []
def printChannelNames(self):
for channel in self.listofchannels_2:
print channel
我可以看出有两件事是错的
首先,“return”语句将结束函数并返回值。函数中途有一个return语句意味着函数的其余部分永远不会执行。如果要在函数完成后返回某些内容,请将其放在函数的末尾
在下面的代码块中,我看不到名为channel\u name
的变量,您必须先创建它,然后才能开始
for i in listofchannels_1:
listofchannels_1.append(graphic(i))
for channel in listofchannels_2:
channel_name[i] = "Channel" + str(channelCount)
print channel_name[i]
如果通道列表仅在window类中使用,那么将其作为类的成员而不是全局成员可能是值得的。您可以使用self.variableName设置和访问它们,如中所示:
Class Window (QMainWindow):
def __init__(self):
self.channelCount = 1
self.listofchannels_1 = []
self.listofchannels_2 = []
def printChannelNames(self):
for channel in self.listofchannels_2:
print channel
您还没有说哪里出了问题。谢谢,我已经编辑过了。python有静态类变量吗?您从未向listofchannels_2添加任何内容,因此内部for循环将永远不会执行。通道列表是整数列表吗?如果没有,您将永远无法查找channel\u name[i]
您还没有说明出了什么问题。谢谢,我已经编辑了它。python有静态类变量吗?您从未向listofchannels\u 2添加任何内容,因此内部for循环将永远不会执行。通道列表是整数列表吗?否则,您将永远无法查找频道名称[i]
谢谢您的回答。我不是以我编写的方式创建变量channel\u name
?我想做的是:“对于listofchannels_1中的每个元素,创建一个名为channel_name的变量,并将其添加到listofchannels_2”。现在我又看了一遍,错过了追加部分。确切地说,您想要的是创建一个具有特定长度的列表,其中包含虚拟值(如果您已经知道长度),您可以使用通道名称[I]替换该列表(例如,channel\u name=[“”对于范围(3)中的x)]
创建一个包含3个空字符串的列表),或者像您所做的那样将其创建为空,并使用append代替。后者要灵活得多,但也有点风险,因为列表的大小会随着您的到来而变化,很高兴能提供帮助。我想我能更清楚地看到你在做什么。实际上,您希望通道列表是正则变量,而不是列表。你已经写了一半了。执行channel_name[i]命令python查找channel_name的第i个元素,它还不存在。您需要的是简单的channel\u name=“channel”+str(self.channelCount)
,然后是self.listofchannels\u 2.append(channel\u name)
(基本上是您刚才没有任何i的内容),或者更简单的是,直接附加它:self.listofchannels\u 2.append(“channel”+str(self.channelCount))
我又看了一遍您的代码,我发现您可能会落入append()
设置的陷阱。每次调用addChannel()函数时,它都会将所有现有的频道名称附加到第二个列表中。这意味着您将得到类似[“1”、“1”、“2”、“1”、“2”、“3”]的输出。您最好的选择是完全放弃for循环,只需执行self.listofchannels_2.append(“Channel”+str(self.channelCount))
和一个打印自我。listofchannels_2
代替谢谢你的回答。我不是以我编写的方式创建变量channels_name
吗?我想做的是:“对于listofchannels_1中的每个元素,创建一个名为channels_name的变量,并将其添加到listofchannels_2中“。现在我再次查看,我错过了附加部分。确切地说,您想要的是使用伪值(如果您已经知道长度)创建一个特定长度的列表,您可以使用通道名称[I]替换该列表(例如,channel\u name=[“”对于范围(3)中的x)]
创建一个包含3个空字符串的列表),或者像您所做的那样将其创建为空,并使用append代替。后者要灵活得多,但也有点风险,因为列表的大小会随着您的到来而变化,很高兴能提供帮助。我想我能更清楚地看到你在做什么。实际上,您希望通道列表是正则变量,而不是列表。你已经写了一半了。D