10.2.4 如何创建一个复选或单选开关菜单项?
菜单项不仅用于从选择表单中得到用户的输入,它们也被用于显示应用程序的状态。经由菜单项来显示状
态的最常用的机制是开关菜单项的使用,开关菜单项仿效一个复选框或单选按钮(你只能够通过改变该菜
单项的文本或使用有效或无效状态来反映应用程序的状态)。图10.4显示了复选和单选菜单项的例子。
图10.4
顾名思义,一个复选开关菜单项在它每次被选择时,它在开和关状态间转换。在一个组中,一次只允许一
个单选菜单项处于开的状态。当同一组中的另一个菜单项被选择时,先前的菜单项改变为关状态。例10.7
显示了如何创建复选和单选菜单项。
例10.7 建造开关菜单项
import wx
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1,
"Toggle Items Example")
p = wx.Panel(self)
menuBar = wx.MenuBar()
menu = wx.Menu()
exit = menu.Append(-1, "Exit")
self.Bind(wx.EVT_MENU, self.OnExit, exit)
menuBar.Append(menu, "Menu")
menu = wx.Menu()
menu.AppendCheckItem(-1, "Check Item 1")
menu.AppendCheckItem(-1, "Check Item 2")
menu.AppendCheckItem(-1, "Check Item 3")
menu.AppendSeparator()
menu.AppendRadioItem(-1, "Radio Item 1")
menu.AppendRadioItem(-1, "Radio Item 2")
menu.AppendRadioItem(-1, "Radio Item 3")
menuBar.Append(menu, "Toggle Items")
self.SetMenuBar(menuBar)
def OnExit(self, event):
self.Close()
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MyFrame()
frame.Show()
app.MainLoop()
正如你从例子所见到的,通过使用方法AppendCheckItem(id, item, helpString="")来添加一个复选框菜
单项,该方法类似于Append()。该方法的参数是wxPython标识符、显示在菜单中的名字、显示在状态栏听
帮助字符串。同样,你可以使用PrependCheckItem(id,item, helpString="")和InsertCheckItem(pos, id, item, helpString=""),这两个方法的行为与它们的无复选框的版本相同。
单选按钮菜单项可以使用AppendRadioItem(id,item,helpString="")方法来添加,你也可以使用
PrependRadioItem(id,item, helpString="")和InsertRadioItem(pos, id, item, helpString="")
方法。一系列连续的单选菜单项被作为一组,一组中一次只能有一个成员被触发。组以第一个非单选菜单
项或菜单分隔符为界。默认情况下,当单选组被创建时,该组中的第一个成员处于选中状态。
开 关菜单项可以通过使用Append()来创建。Append()的kind参数要求下列常量值之一:wx.ITEM_CHECK, wx.ITEM_NORMAL, wx.ITEM_RADIO或wx.ITEM_SEPARATOR,其中的每个值创建一个适当类型的菜单项。这是有用 的,如果你正在使用某种数据驱动过程自动创建这些菜单项的话。所有类型的菜单项都可以使用这同种方法来创建,尽管指定kind为 wx.ITEM_SEPARATOR来生成一个分隔符必须给id参数传递wx.ID_SEPARATOR。
当你使用wx.MenuItem构造函数时你也可以创建一个开关菜单项(给参数kind一个相应的常量值)。所得
的菜单项可以使用AppendItem(), PrependItem(), InsertItem()之一的方法被添加到一个菜单。
要确定一个菜单项的开关状态,使用IsCheckable(),如果该项是一个复选或单选项,函数返回True,使
用IsChecked(),如果该项是可开关的且处于选中状态,那么返回True。你也可以使用Check(check)方法
来设置一个菜单项的开关状态,check是一个布尔参数。使用Check(check)方法设置时,被设置的菜单项
是单选的,那么将影响同一组别的项。
你也可以使用IsChecked(id)从菜单或菜单栏得到一个菜单项的开关状态,它要求相应菜单项的id。你也
可以使用Check(id, check)来设置菜单栏或菜单中的菜单项,参数check是布尔值。
菜单项不仅用于从选择表单中得到用户的输入,它们也被用于显示应用程序的状态。经由菜单项来显示状
态的最常用的机制是开关菜单项的使用,开关菜单项仿效一个复选框或单选按钮(你只能够通过改变该菜
单项的文本或使用有效或无效状态来反映应用程序的状态)。图10.4显示了复选和单选菜单项的例子。
图10.4
顾名思义,一个复选开关菜单项在它每次被选择时,它在开和关状态间转换。在一个组中,一次只允许一
个单选菜单项处于开的状态。当同一组中的另一个菜单项被选择时,先前的菜单项改变为关状态。例10.7
显示了如何创建复选和单选菜单项。
例10.7 建造开关菜单项
import wx
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1,
"Toggle Items Example")
p = wx.Panel(self)
menuBar = wx.MenuBar()
menu = wx.Menu()
exit = menu.Append(-1, "Exit")
self.Bind(wx.EVT_MENU, self.OnExit, exit)
menuBar.Append(menu, "Menu")
menu = wx.Menu()
menu.AppendCheckItem(-1, "Check Item 1")
menu.AppendCheckItem(-1, "Check Item 2")
menu.AppendCheckItem(-1, "Check Item 3")
menu.AppendSeparator()
menu.AppendRadioItem(-1, "Radio Item 1")
menu.AppendRadioItem(-1, "Radio Item 2")
menu.AppendRadioItem(-1, "Radio Item 3")
menuBar.Append(menu, "Toggle Items")
self.SetMenuBar(menuBar)
def OnExit(self, event):
self.Close()
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MyFrame()
frame.Show()
app.MainLoop()
正如你从例子所见到的,通过使用方法AppendCheckItem(id, item, helpString="")来添加一个复选框菜
单项,该方法类似于Append()。该方法的参数是wxPython标识符、显示在菜单中的名字、显示在状态栏听
帮助字符串。同样,你可以使用PrependCheckItem(id,item, helpString="")和InsertCheckItem(pos, id, item, helpString=""),这两个方法的行为与它们的无复选框的版本相同。
单选按钮菜单项可以使用AppendRadioItem(id,item,helpString="")方法来添加,你也可以使用
PrependRadioItem(id,item, helpString="")和InsertRadioItem(pos, id, item, helpString="")
方法。一系列连续的单选菜单项被作为一组,一组中一次只能有一个成员被触发。组以第一个非单选菜单
项或菜单分隔符为界。默认情况下,当单选组被创建时,该组中的第一个成员处于选中状态。
开 关菜单项可以通过使用Append()来创建。Append()的kind参数要求下列常量值之一:wx.ITEM_CHECK, wx.ITEM_NORMAL, wx.ITEM_RADIO或wx.ITEM_SEPARATOR,其中的每个值创建一个适当类型的菜单项。这是有用 的,如果你正在使用某种数据驱动过程自动创建这些菜单项的话。所有类型的菜单项都可以使用这同种方法来创建,尽管指定kind为 wx.ITEM_SEPARATOR来生成一个分隔符必须给id参数传递wx.ID_SEPARATOR。
当你使用wx.MenuItem构造函数时你也可以创建一个开关菜单项(给参数kind一个相应的常量值)。所得
的菜单项可以使用AppendItem(), PrependItem(), InsertItem()之一的方法被添加到一个菜单。
要确定一个菜单项的开关状态,使用IsCheckable(),如果该项是一个复选或单选项,函数返回True,使
用IsChecked(),如果该项是可开关的且处于选中状态,那么返回True。你也可以使用Check(check)方法
来设置一个菜单项的开关状态,check是一个布尔参数。使用Check(check)方法设置时,被设置的菜单项
是单选的,那么将影响同一组别的项。
你也可以使用IsChecked(id)从菜单或菜单栏得到一个菜单项的开关状态,它要求相应菜单项的id。你也
可以使用Check(id, check)来设置菜单栏或菜单中的菜单项,参数check是布尔值。