如何制作WX Python For循环以更新一系列文本框

时间:2015-06-29 18:47:22

标签: python user-interface wxpython

我被要求为夏令课制作一个子网扫描仪应用程序。该应用程序是完整的,但它的丑陋,因为代码非常冗长。

这很长,因为应用程序要求要求gui上有8个ip地址,以及是否在该IP上有返回。

由于需要GUI,我创建了一系列静态文本字段来表示它正在扫描的各个IP。

该应用程序有一个扫描仪按钮,一旦按下该按钮并且扫描结算,它将使用适当的值更新电路板。

为了方便起见,我设置了一个全局占位符值,每次需要查看新集时,只增加8。

所以我想做什么

我想创建一个for循环来更新八个字段中每个字段的静态文本,而不必单独编写每个字段。

我的工作如下:

self.XValue0.SetLabel(str(placeholder))
self.XValue1.SetLabel(str(placeholder1))
self.XValue2.SetLabel(str(placeholder2))
self.XValue3.SetLabel(str(placeholder3))
self.XValue4.SetLabel(str(placeholder4))
self.XValue5.SetLabel(str(placeholder5))
self.XValue6.SetLabel(str(placeholder6))
self.XValue7.SetLabel(str(placeholder7))

XValue是指192.168.1.X,其中X是要改变的值,因为无论如何,子网的第一部分保持不变。

带有数字的占位符引用一个全局值,该值将数字(1-7)添加到占位符以填充该字段。

例如,如果GUI从192.168.1.0开始,它将填充到192.168.1.7并显示该范围内所有位置的是或否。

我想做的是与此类似的事情:

for x in range(0,7):

 PlaceholderValue = str(placeholder + x)
 XValue = 'XValue' + PlaceholderValue
 self.XValue.setLabel(PlaceholderValue)

然而,当我这样做时,控制台给我一个错误,说它找不到“XValue”。

我的问题是这个。有没有办法按照我想要的方式使循环工作,或者是否必须根据我的编写方式使用更长的代码。谢谢大家。对不起,很长的帖子,这是我潜伏多年后的第一个问题。如果您需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

创建静态文本对象时,将引用保存在列表中以及(或代替)XValue属性。

self.XValues = []
for x in range(8):
    self.XValues.append(wx.StaticText(...))

然后它可以更容易循环并稍后更新

for i, xvalue in enumerate(self.XValues):
    xvalue.SetLabel(placeholder + i)

您仍然可以单独访问标签,例如访问之前的XValue4,您可以self.XValues[4]

此外,您可以像尝试一样完成此操作,但您需要使用getattr动态获取对象的属性,但最好不要将标签存储在列表中。

for x in range(8):

    PlaceholderValue = str(placeholder + x)
    XValue = 'XValue' + PlaceholderValue
    getattr(self, XValue).setLabel(PlaceholderValue)