本文介绍在GUI程序中常用的另一种控件复选框(CheckBox),它通常用于表示可以启用或禁用应用中的功能。在wxPython中,实现复选框的类为wx.CheckBox。
一、wx.CheckBox简介
wx.CheckBox复选框是一个有标签的框,默认情况下是打开(复选标记可见)或关闭(没有复选标记)。当wx.CHK_3STATE样式标志已设置后,它可以有第三种状态,称为混合状态或待定状态。
wx.CheckBox支持以下窗口样式:
- wx.CHK_2STATE:创建一个支持两种状态的复选框,这是默认设置。
- wx.CHK_3STATE:创建一个三态复选框。
- wx.CHK_ALLOW_3RD_STATE_FOR_USER:默认情况下,用户不能将3状态复选框设置为第三个状态。这只能从代码中完成。使用此标志允许用户通过单击将复选框设置为第三个状态。
- wx.ALIGN_RIGHT:使文本显示在复选框的左侧。
wx.CheckBox发出的事件:
- EVT_CHECKBOX:点击复选框时, 处理wx.EVT_CHECKBOX事件。
wx.CheckBox常用方法:
- Get3StateValue(self):获取3状态复选框的状态。其返回值类型为wx.CheckBoxState。
- GetValue(self):获取2状态复选框的状态。如果被选中则返回True,否则返回False。
- Is3State(self):返回该复选框是否为3状态复选框。如果该复选框是3状态复选框,则为True,如果是2状态复选框则为False。
- IsChecked(self):同GetValue方法,如果复选框被选中,它返回True,否则返回False。
- Set3StateValue(self, state):将复选框设置为给定状态。它不会触发wx.EVT_CHECKBOX事件。
- SetValue(self, state):将复选框设置为给定状态。它不会触发wx.EVT_CHECKBOX事件。
图1. Wx.CheckBox 类继承关系
二、wx.CheckBox演示
下面的代码演示如何使用wx.CheckBox。
#复选框(wx.CheckBox)
import wx
class SampleCheckBox(wx.Frame):
def __init__(self, *args, **kw):
super(SampleCheckBox, self).__init__(*args, **kw)
self.InitUi()
def InitUi(self):
#设置标题
self.SetTitle("实战wxPython: CheckBox演示")
#设置窗口尺寸
self.SetSize(400, 240)
panel = wx.Panel(self)
vBox = wx.BoxSizer(wx.HORIZONTAL)
chkBox = wx.CheckBox(panel, label="显示标题")
chkBox.SetValue(True)
chkBox.Bind(wx.EVT_CHECKBOX, self.OnShowOrHideTitle)
vBox.Add(chkBox, flag=wx.TOP|wx.LEFT, border=30)
panel.SetSizer(vBox)
self.Centre()
def OnShowOrHideTitle(self, e):
sender = e.GetEventObject()
isChecked = sender.GetValue()
if isChecked:
self.SetTitle("实战wxPython: CheckBox演示")
else:
self.SetTitle("")
def main():
app = wx.App()
sample = SampleCheckBox(None)
sample.Show()
app.MainLoop()
if __name__ == "__main__":
main()
上述代码演示了如何使用wx.CheckBox控件来显示和隐藏窗口的标题。当我们点击”显示标题”复选框时,wx.EVT_CHECKBOX事件被触发,方法OnShowOrHideTitle()处理该触发事件。
def OnShowOrHideTitle(self, e):
sender = e.GetEventObject()
isChecked = sender.GetValue()
if isChecked:
self.SetTitle("实战wxPython: CheckBox演示")
else:
self.SetTitle("")
当复选框被选中时,显示窗口标题,如图2所示:
图2: wx.CheckBox演示,选中时显示窗口标题
当复选框未被选中时,则隐藏窗口标题, 如图3所示:
图3:wx.CheckBox演示,未选中时隐藏窗口标题
三、本文知识点
- 了解和使用wx.CheckBox。
- 了解2态复选框和3态复选框。