在wxPython中,wx.for是一个十分常用的控件,它可以很方便地输出列表、控制循环等,本文将对wx.for进行详细的阐述,包括如何输出、如何控制循环、如何实现多重循环等等。
一、输出列表
wx.for最常用的功能就是输出列表,下面是一个使用wx.for输出简单列表的例子:
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, title):
super(MyFrame, self).__init__(parent, title=title, size=(200, 150))
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
lst = ['apple', 'banana', 'orange', 'pear']
for item in lst:
st = wx.StaticText(panel, label=item)
vbox.Add(st, flag=wx.ALL, border=5)
panel.SetSizer(vbox)
self.Centre()
self.Show(True)
app = wx.App()
MyFrame(None, 'List Example')
app.MainLoop()
在上面的例子中,我们首先定义了一个lst列表,然后在for循环中将lst的每一个元素输出到一个wx.StaticText控件上,并添加到一个wx.BoxSizer里,最后将BoxSizer设置为panel的Sizer,就完成了列表的输出。也可以使用wx.ListBox、wx.CheckListBox等控件来输出列表。
二、控制循环
对于wx.for的循环控制,可以使用break、continue、else等语句来控制循环。下面是一个使用else语句的例子:
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, title):
super(MyFrame, self).__init__(parent, title=title, size=(200, 150))
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
lst = ['apple', 'banana', 'orange', 'pear']
for item in lst:
st = wx.StaticText(panel, label=item)
vbox.Add(st, flag=wx.ALL, border=5)
else:
vbox.Add(wx.StaticText(panel, label='List end', style=wx.ALIGN_CENTER))
panel.SetSizer(vbox)
self.Centre()
self.Show(True)
app = wx.App()
MyFrame(None, 'List Example')
app.MainLoop()
在上面的例子中,我们在for循环的结尾加了一个else语句,当for循环正常结束时,就会执行else语句,输出一个“List end”的wx.StaticText控件。
三、多重循环
wx.for也可以实现多重循环,这里通过一个例子来说明:
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, title):
super(MyFrame, self).__init__(parent, title=title, size=(200, 150))
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
lst1 = ['red', 'green', 'blue']
lst2 = ['circle', 'square', 'triangle']
for color in lst1:
for shape in lst2:
st = wx.StaticText(panel, label=color + ' ' + shape)
vbox.Add(st, flag=wx.ALL, border=5)
panel.SetSizer(vbox)
self.Centre()
self.Show(True)
app = wx.App()
MyFrame(None, 'List Example')
app.MainLoop()
在上面的例子中,我们定义了两个列表lst1和lst2,然后使用两个嵌套的for循环将它们的元素拼接成字符串输出到一个wx.StaticText控件上,就实现了多重循环。
四、选取调用
对于wx.for的选取调用,也可以实现一些有趣的效果,下面是一些选取调用的例子:
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, title):
super(MyFrame, self).__init__(parent, title=title, size=(200, 150))
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
lst = ['apple', 'banana', 'orange', 'pear']
for i in range(len(lst)):
if i%2 == 0:
st = wx.StaticText(panel, label=lst[i], style=wx.FONTWEIGHT_BOLD)
else:
st = wx.StaticText(panel, label=lst[i])
vbox.Add(st, flag=wx.ALL, border=5)
panel.SetSizer(vbox)
self.Centre()
self.Show(True)
app = wx.App()
MyFrame(None, 'List Example')
app.MainLoop()
在上面的例子中,我们使用一个if语句来判断当前的元素索引是奇数还是偶数,当索引为偶数时,将wx.StaticText控件的粗体字加粗。
还可以使用lambda表达式来实现更复杂的选取调用,例如下面的例子:
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, title):
super(MyFrame, self).__init__(parent, title=title, size=(200, 150))
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
lst = ['apple', 'banana', 'orange', 'pear']
func = lambda x: x if len(x)<=5 else x[:5]+'...'
for item in lst:
st = wx.StaticText(panel, label=func(item))
vbox.Add(st, flag=wx.ALL, border=5)
panel.SetSizer(vbox)
self.Centre()
self.Show(True)
app = wx.App()
MyFrame(None, 'List Example')
app.MainLoop()
在上面的例子中,我们使用了一个lambda表达式func,将长度超过5的字符串裁剪成5个字符并加上省略号。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/235901.html