0

我正在使用带有 while 循环的静态文本创建表格,之后我想设置标签。我有问题,因为它只适用于最后一个。这是我的代码:

import wx

class Mainframe(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent)
        self.panel = wx.Panel(self)

        def test(self,n):
            while n <=5:
                a = wx.StaticText(self.panel, label='bad', id=n, pos=(20,30*n))
                n = n+1
            return a

        test(self,0)

        if test(self,0).GetId()==1:
            test(self,0).SetLabel('good')

        if test(self,0).GetId()==5:
            test(self,0).SetLabel('exelent')

if __name__=='__main__':
    app = wx.App(False)
    frame = Mainframe(None)
    frame.Show()
    app.MainLoop()
4

1 回答 1

1

当您返回 a 时,它只是创建的最后一个控件,因为每次循环时它都会被覆盖。将控件附加到列表中,然后您就可以访问它们。另请注意,您调用了 5 次 test,因此您将在彼此之上创建 5 组静态文本。

import wx


class Mainframe(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent)
        self.panel = wx.Panel(self)

        ctrls = []
        for n in range(6):
            ctrls.append(wx.StaticText(self.panel, label='bad',
                pos=(20, 30 * n)))

        ctrls[1].SetLabel('good')
        ctrls[5].SetLabel('excellent')


if __name__ == '__main__':
    app = wx.App(False)
    frame = Mainframe(None)
    frame.Show()
    app.MainLoop()
于 2013-09-18T12:09:31.283 回答