Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类对象列表不起作用_Python_List_Pyqt4 - Fatal编程技术网

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