本文介绍在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(selfstate):将复选框设置为给定状态。它不会触发wx.EVT_CHECKBOX事件。
  • SetValue(selfstate):将复选框设置为给定状态。它不会触发wx.EVT_CHECKBOX事件。

python word 复选框 python复选框控件_python

 图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所示:

python word 复选框 python复选框控件_python_02

 图2: wx.CheckBox演示,选中时显示窗口标题

当复选框未被选中时,则隐藏窗口标题, 如图3所示:

python word 复选框 python复选框控件_python word 复选框_03

 图3:wx.CheckBox演示,未选中时隐藏窗口标题

三、本文知识点

  • 了解和使用wx.CheckBox。
  • 了解2态复选框和3态复选框。