在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/zh-hant/n/235901.html