Python 创建100+;使用循环的Windows窗体组件

Python 创建100+;使用循环的Windows窗体组件,python,arrays,winforms,loops,ironpython,Python,Arrays,Winforms,Loops,Ironpython,我已经读了很多不同的文章、论坛和问题,但仍然无法理解这一点 我是一个编程高手,目前正在使用IronPython创建一个Windows窗体应用程序。Visual Studio 2015是我的IDE 我想从CSV加载的数组中在主窗体上创建100多个标签元素。阵列工作正常,代码如下: with open('sites.csv', 'rb') as f: reader = csv.reader(f) for row in reader: sites.append(row[0]) 该数组如下所示

我已经读了很多不同的文章、论坛和问题,但仍然无法理解这一点

我是一个编程高手,目前正在使用IronPython创建一个Windows窗体应用程序。Visual Studio 2015是我的IDE

我想从CSV加载的数组中在主窗体上创建100多个标签元素。阵列工作正常,代码如下:

with open('sites.csv', 'rb') as f:
reader = csv.reader(f)
for row in reader:
    sites.append(row[0])
该数组如下所示: 站点名称1、站点名称2、站点名称3、站点名称4等

在我的“MyForm”类中,在显示表单之前,我在该类中创建子控件,我有一个循环来遍历该数组,并为列表中的每个sitename条目创建一个标签

    #Create Label for each Site
    for s in sites:

        sitename = str(s) #Convert Name into a String
        elementname = sitename.replace(" ","") + "Label"
        elementname = Label()
        elementname.Name = str(elementname)
        elementname.Parent = self
        elementname.Location = Point(lastx,lasty)

        counter = counter + counter
        lasty = lasty + 10
变量
sitename
将列表中的当前站点名称条目转换为带有任何空格的字符串值(例如Northern site)

变量
elementname
接受
sitename
变量,删除空格并将单词标签添加到名称的末尾

然后,我尝试在表单上创建一个标签对象,其名称保存在
elementname
变量中

虽然在运行时这不会导致错误或异常,但结果仅输出一个标签,其中包含数组/列表中第一个条目的名称

我可能是从错误的角度来的。我可以通过逐步查看代码来了解它为什么不起作用。它使用变量
elementname
创建每个标签,而不是我想要的sitenamelabel


我尝试使用字典动态生成变量,但这似乎不起作用,并尝试在表单上创建标签数组,然后用循环填充这些变量,但这似乎不起作用。

您必须实际将创建的每个标签添加到表单中。这样做的一个好方法是创建一个标签列表,并使用AddRange方法将它们添加到末尾

labels = [] # create a blank list to hold all labels
for s in sites:

    sitename = str(s) #Convert Name into a String
    elementname = sitename.replace(" ","") + "Label"
    elementname = Label()
    elementname.Name = str(elementname)
    elementname.Parent = self
    elementname.Location = Point(lastx,lasty)

    labels.append(elementname) # add each element to the list

    counter = counter + counter
    lasty = lasty + 10

# Add all labels to the form
MyForm.Controls.AddRange(System.Array[Label](labels))

您必须将创建的每个标签实际添加到表单中。这样做的一个好方法是创建一个标签列表,并使用AddRange方法将它们添加到末尾

labels = [] # create a blank list to hold all labels
for s in sites:

    sitename = str(s) #Convert Name into a String
    elementname = sitename.replace(" ","") + "Label"
    elementname = Label()
    elementname.Name = str(elementname)
    elementname.Parent = self
    elementname.Location = Point(lastx,lasty)

    labels.append(elementname) # add each element to the list

    counter = counter + counter
    lasty = lasty + 10

# Add all labels to the form
MyForm.Controls.AddRange(System.Array[Label](labels))