Python 创建100+;使用循环的Windows窗体组件
我已经读了很多不同的文章、论坛和问题,但仍然无法理解这一点 我是一个编程高手,目前正在使用IronPython创建一个Windows窗体应用程序。Visual Studio 2015是我的IDE 我想从CSV加载的数组中在主窗体上创建100多个标签元素。阵列工作正常,代码如下: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]) 该数组如下所示
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))