如何使WX Python For循环更新一系列文本框

2024-05-23 14:01:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我被要求为暑期班制作一个子网扫描程序。该应用程序是完整的,但它丑陋的罪恶,因为代码是非常漫长的

这是冗长的,因为应用程序的要求需要一个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循环按我所希望的方式工作,或者根据我编写它的方式,必然需要更长的代码。谢谢大家。抱歉,这是我潜伏多年后的第一个问题。请让我知道如果你们都需要更多的信息


Tags: 代码文本selfip应用程序for静态gui
1条回答
网友
1楼 · 发布于 2024-05-23 14:01:36

创建静态文本对象时,将引用保存在列表中以及(或代替)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)

相关问题 更多 >