本章介绍图形用户界面中主要所用到的控件:
- 静态文本
- 按钮
- 复选框
- 单选按钮
- 下拉列表
- 静态图片控件
静态文本和按钮
点击“Button”,实现文本显示改变信息。
# 静态文本和按钮
import wx
class myFrame(wx.Frame):
def __init__(self):
super().__init__(parent=None, title='静态文本和按钮')
self.Center()
panel = wx.Panel(parent=self)
vBox = wx.BoxSizer(wx.VERTICAL)
# 静态文本
self.titleText = wx.StaticText(parent=panel, label='show text')
# 普通按钮
b1 = wx.Button(parent=panel, label='Button', id=1)
self.Bind(wx.EVT_BUTTON, self.on_Click, b1)
# 带有图标的按钮,wx.BITMAP_TYPE_PNG--设置图标格式类型
bmp = wx.Bitmap(r'D:\WORK\Python\Python_Code\ Basics\image01.png', wx.BITMAP_TYPE_PNG)
b2 = wx.BitmapButton(panel, -1, bmp)
self.Bind(wx.EVT_BUTTON, self.on_Click, b2)
# 两种状态的按钮
b3 = wx.ToggleButton(panel, -1, 'ToggleButton')
self.Bind(wx.EVT_BUTTON, self.on_Click, b3)
vBox.AddMany([(100, 10, 1, wx.CENTER | wx.FIXED_MINSIZE), (self.titleText, 1, wx.CENTER | wx.FIXED_MINSIZE),
(b1, 1, wx.CENTER | wx.EXPAND), (b2, 1, wx.Center | wx.EXPAND), (b3, 1, wx.Center | wx.EXPAND)])
panel.SetSizer(vBox)
def on_Click(self, evt):
self.titleText.SetLabelText('hello')
class myApp(wx.App):
def OnInit(self):
frame = myFrame()
frame.Show()
return True
if __name__ == '__main__':
app = myApp()
app.MainLoop()
执行结果:
复选框和单选按钮
复选框功能实现选择编程语言,单选按钮实现选择性别,选择喜欢的水果。如下所示。
# 复选框和单选按钮
import wx
class myFrame(wx.Frame):
def __init__(self):
super().__init__(parent=None, title='复选框和单选按钮')
self.Center()
panel = wx.Panel(parent=self)
hBox1 = wx.BoxSizer(wx.HORIZONTAL)
# 复选框
languageText = wx.StaticText(panel, label='选择你喜欢的编程语言:')
cb1 = wx.CheckBox(panel, 1, 'Python')
cb2 = wx.CheckBox(panel, 2, 'Java')
cb2.SetValue(True)
cb3 = wx.CheckBox(panel, 3, 'C++')
self.Bind(wx.EVT_CHECKBOX, self.on_checkbox_click, id=1, id2=3)
hBox1.AddMany([(languageText, 1, wx.LEFT | wx.RIGHT | wx.FIXED_MINSIZE, 5), (cb1, 1, wx.ALL | wx.FIXED_MINSIZE),
(cb2, 1, wx.ALL | wx.FIXED_MINSIZE), (cb3, 1, wx.ALL | wx.FIXED_MINSIZE)])
hBox2 = wx.BoxSizer(wx.HORIZONTAL)
# 文本框和单选按钮
sexText = wx.StaticText(panel, label='选择你的性别:')
radio1 = wx.RadioButton(panel, 4, '男', style=wx.RB_GROUP)
radio2 = wx.RadioButton(panel, 5, '女')
self.Bind(wx.EVT_RADIOBUTTON, self.on_readio_click, id=4, id2=5)
hBox2.AddMany([(sexText, 1, wx.LEFT | wx.RIGHT | wx.FIXED_MINSIZE, 5), (radio1, 1, wx.ALL | wx.FIXED_MINSIZE),
(radio2, 1, wx.ALL | wx.FIXED_MINSIZE)])
hBox3 = wx.BoxSizer(wx.HORIZONTAL)
# 文本框和单选按钮
fruitsText = wx.StaticText(panel, label='选择你喜欢的水果:')
radio3 = wx.RadioButton(panel, 6, '苹果', style=wx.RB_GROUP)
radio4 = wx.RadioButton(panel, 7, '香蕉')
radio5 = wx.RadioButton(panel, 7, '栗子')
self.Bind(wx.EVT_RADIOBUTTON, self.on_readio1_click, id=6, id2=8)
hBox3.AddMany(
[(fruitsText, 1, wx.LEFT | wx.RIGHT | wx.FIXED_MINSIZE, 5), (radio3, 1, wx.ALL | wx.FIXED_MINSIZE),
(radio4, 1, wx.ALL | wx.FIXED_MINSIZE), (radio5, 1, wx.ALL | wx.FIXED_MINSIZE)])
vBox = wx.BoxSizer(wx.VERTICAL)
vBox.AddMany(
[(hBox1, 1, wx.ALL | wx.EXPAND, 5), (hBox2, 1, wx.ALL | wx.EXPAND, 5), (hBox3, 1, wx.ALL | wx.EXPAND, 5)])
panel.SetSizer(vBox)
def on_checkbox_click(self, evt):
'复选框方法'
cb = evt.GetEventObject()
print('编程语言选择:%s,此状态:%s' % (cb.GetLabel(), evt.IsChecked()))
def on_readio_click(self, evt):
'单选按钮方法'
rb = evt.GetEventObject()
print('性别选择:%s' % (rb.GetLabel()))
def on_readio1_click(self, evt):
'单选按钮方法'
rb = evt.GetEventObject()
print('水果选择:%s' % (rb.GetLabel()))
class myApp(wx.App):
def OnInit(self):
frame = myFrame()
frame.Show()
return True
if __name__ == '__main__':
app = myApp()
app.MainLoop()
执行结果:
下拉列表
通过编程语言和性别下拉列表进行选择。
# 下拉列表
import wx
class myFrame(wx.Frame):
def __init__(self):
super().__init__(parent=None, title='下拉列表')
self.Center()
panel = wx.Panel(parent=self)
hBox1 = wx.BoxSizer(wx.HORIZONTAL)
# 下拉列表:COMBOBOX
languageText = wx.StaticText(panel, label='选择你喜欢的编程语言:')
listLanguage = ['java', 'python', 'C++']
CB1 = wx.ComboBox(panel, -1, value='python', choices=listLanguage, style=wx.CB_SORT)
self.Bind(wx.EVT_COMBOBOX, self.on_combobox_click, CB1)
hBox1.Add(languageText, 1, flag=wx.LEFT | wx.Right | wx.FIXED_MINSIZE, border=5)
hBox1.Add(CB1, 1, flag=wx.ALL | wx.FIXED_MINSIZE)
# 下拉列表:Choice
hBox2 = wx.BoxSizer(wx.HORIZONTAL)
exText = wx.StaticText(panel, label='选择你的性别:')
listSex = ['男', '女']
ch1 = wx.Choice(panel, -1, choices=listSex)
self.Bind(wx.EVT_CHOICE, self.on_choice_click, ch1)
hBox2.Add(exText, 1, flag=wx.ALL | wx.EXPAND, border=5)
hBox2.Add(ch1, 1, flag=wx.ALL | wx.FIXED_MINSIZE)
vBox = wx.BoxSizer(wx.VERTICAL)
vBox.Add(hBox1, 1, flag=wx.ALL | wx.EXPAND, border=5)
vBox.Add(hBox2, 1, flag=wx.ALL | wx.EXPAND, border=5)
panel.SetSizer(vBox)
def on_combobox_click(self, evt):
'下拉列表方法'
print('编程选择:%s' % (evt.GetString()))
def on_choice_click(self, evt):
print('性别选择:%s' % (evt.GetString()))
class myApp(wx.App):
def OnInit(self):
frame = myFrame()
frame.Show()
return True
if __name__ == '__main__':
app = myApp()
app.MainLoop()
执行结果:
静态图片控件
点击“Button-1”、“Button-2”实现切换图片。
# 静态图片控件
import wx
class myFrame(wx.Frame):
def __init__(self):
super().__init__(parent=None, title='静态图片控件', size=(300, 300))
# 图像列表对象
self.bmps = [wx.Bitmap(r'D:\WORK\Python\Python_Code\ Basics\01.jpg', wx.BITMAP_TYPE_JPEG),
wx.Bitmap(r'D:\WORK\Python\Python_Code\ Basics\02.jpg', wx.BITMAP_TYPE_JPEG),
wx.Bitmap(r'D:\WORK\Python\Python_Code\ Basics\03.jpg', wx.BITMAP_TYPE_JPEG)]
self.Center()
# 类成员的是实例变量
self.panel = wx.Panel(parent=self)
vBox1 = wx.BoxSizer(wx.VERTICAL)
b1 = wx.Button(parent=self.panel, id=1, label='Button-1')
b2 = wx.Button(parent=self.panel, id=2, label='Button-2')
self.Bind(wx.EVT_BUTTON, self.on_button_click, id=1, id2=2)
self.image = wx.StaticBitmap(self.panel, -1, self.bmps[0])
vBox1.Add(b1, proportion=1, flag=wx.CENTER | wx.EXPAND)
vBox1.Add(b2, proportion=1, flag=wx.CENTER | wx.EXPAND)
vBox1.Add(self.image, proportion=3, flag=wx.CENTER)
self.panel.SetSizer(vBox1)
def on_button_click(self, evt):
'按钮方法'
evtID = evt.GetId()
if evtID == 1:
self.image.SetBitmap(self.bmps[1])
elif evtID == 2:
self.image.SetBitmap(self.bmps[2])
else:
print('Button Id Error')
class myApp(wx.App):
def OnInit(self):
frame = myFrame()
frame.Show()
return True
if __name__ == '__main__':
app = myApp()
app.MainLoop()
执行结果: