按钮控件允许用户通过单击来执行操作。按钮控件即可以显示文本,也可以显示图像,当按钮被单击时,它的外观应该发生变化,看起来像是被按下,然后释放。
显示文本的按钮控件是wx.Button,显示图像的按钮控件是wx.BitmapButton。
同样,在一个窗体中创建按钮控件也非常简单,只需要调用按钮控件的构造函数实例化按钮控件类即可。
wx. Button的构造函数为:
Button(parent, id=ID_ANY, label="", pos=DefaultPosition, size=DefaultSize, style=0, validator=DefaultValidator, name=ButtonNameStr)
wx. Button构造函数的参数同文本控件构造函数的参数完全相同,参数意义可参见文本控件的构造函数。
wx.Button类有一个跨平台的样式标记:wx.BU_EXACTFIT。如果定义了这个标记,那么按钮就不把系统默认的尺寸作为最小的尺寸,而是把能够恰好填充标签的尺寸作为最小尺寸。你可以使用标记wx.BU_LEFT, wx.BU_RIGHT, wx.BU_TOP, 和 wx.BU_BOTTOM来改变按钮中标签文本的对齐方式。
wx.BitmapButton的构造函数:
BitmapButton(parent,id=ID_ANY,bitmap=NullBitmap,pos=DefaultPosition,size=DefaultSize,style=BU_AUTODRAW, validator=DefaultValidator, name=ButtonNameStr)
wx.BitmapButton的构造函数与前面控件不同的是,第三个参数的类型是wx.Bitmap,wx.Bitmap是一个位图类。在调用wx.BitmapButton构造函数之前,需要创建wx.Bitmap对象。
响应按钮事件
wx.Button和wx.BitmapButton被用户单击时,会触发一个命令事件,事件类型是EVT_BUTTON。
案例代码:
class ButtonExampleFrame(wx.Frame):
def __init__(self, *args, **kw):
# 调用父类的 __init__ 方法
super(ButtonExampleFrame, self).__init__(*args, **kw)
#创建面板
panel = wx.Panel(self, -1)
#创建文本按钮
textButton = wx.Button(panel, -1, "我是一个按钮", (100, 10),(200,45))
# 绑定按钮事件
self.Bind(wx.EVT_BUTTON, self.OnTexButtonDown,textButton)
#创建wx.Bitmap对象
pic=wx.Image('d:\\button.bmp',wx.BITMAP_TYPE_BMP).ConvertToBitmap()
#创建图像按钮
bitmapButton=wx.BitmapButton(panel,-1,pic,(100,100),(160,50))
# 绑定按钮事件
self.Bind(wx.EVT_BUTTON, self.OnBitmapButtonDown,bitmapButton)
#textButton事件处理方法
def OnTexButtonDown(self,event):
wx.MessageBox("您按下了TexButton")
#bitmapButton事件处理方法
def OnBitmapButtonDown(self,event):
wx.MessageBox("您按下了TexButton")
def main():
app = wx.App()
frame = ButtonExampleFrame(None, title='按钮控件')
frame.Show(True)
app.MainLoop()
if __name__ == '__main__':
main()案例代码执行效果图:
wx.ToggleButton可以创建一个开关按钮,开关按钮和文本按钮基本相同,都是显示带文字的按钮。不同的是文本按钮按下去后又被释放。开关按钮按下去后,将会一直保持按下去的状态,直至再次按下该按钮,按钮才会被释放。
案例代码:
import wx
class ToggleButtonExampleFrame(wx.Frame):
def __init__(self, *args, **kw):
# 调用父类的 __init__ 方法
super(ToggleButtonExampleFrame, self).__init__(*args, **kw)
#创建面板
panel = wx.Panel(self, -1)
#创建文本按钮
toggleButton = wx.ToggleButton(panel, -1, "我是一个开关按钮", (100, 10),(200,45))
# 绑定按钮事件
self.Bind(wx.EVT_BUTTON, self.OnToggleButtonDown,toggleButton)
#textButton事件处理方法
def OnToggleButtonDown(self,event):
wx.MessageBox("您按下了TexButton")
def main():
app = wx.App()
frame = ToggleButtonExampleFrame(None, title='按钮控件')
frame.Show(True)
app.MainLoop()
if __name__ == '__main__':
main()案例代码执行效果图:
