我被要求为暑期班制作一个子网扫描程序。该应用程序是完整的,但它丑陋的罪恶,因为代码是非常漫长的
这是冗长的,因为应用程序的要求需要一个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,并显示该范围内所有位置的yes或no
我想做的是类似的事情:
for x in range(0,7):
PlaceholderValue = str(placeholder + x)
XValue = 'XValue' + PlaceholderValue
self.XValue.setLabel(PlaceholderValue)
但是,当我这样做时,控制台会给我一个错误,说它找不到“XValue”
我的问题是。有没有一种方法可以让for循环按我所希望的方式工作,或者根据我编写它的方式,必然需要更长的代码。谢谢大家。抱歉,这是我潜伏多年后的第一个问题。请让我知道如果你们都需要更多的信息
创建静态文本对象时,将引用保存在列表中以及(或代替)XValue属性
这样就更容易在以后进行循环和更新
您仍然可以单独访问标签,例如,要访问以前的
XValue4
,您可以执行self.XValues[4]
另外,您也可以像以前那样做,只是需要使用
getattr
来动态获取对象的属性,但最好将标签存储在列表中相关问题 更多 >
编程相关推荐