wxPython – 按钮

wxPython – 按钮

按钮小部件在任何GUI界面中都是最广泛使用的。它捕捉由用户产生的点击事件。它最明显的用途是触发与它绑定的处理函数。

wxPython类库提供了不同类型的按钮。有一个简单的、传统的按钮,即 wx.Button 类对象,它携带一些文本作为其标题。也有一个双状态的按钮,它被命名为 wx.ToggleButton。 它的按下或压下状态可以通过eventhandler函数来识别。

另一种类型的按钮, wx.BitmapButton 在其表面显示一个位图(图像)作为图标。

wx.Button类和wx.ToggleButton类的构造函数需要以下参数-

Wx.Button(parent, id, label, pos, size, style)

这些是wx.Button类的一些重要方法。

S.N. 方法和描述
1 SetLabel() 以编程方式设置按钮的标题。
2 GetLabel() 返回按钮的标题。
3 SetDefault() 按钮被设置为顶层窗口的默认值。模仿按回车键时的点击事件

wx.ToggleButton类的两个重要方法是—

S.N. 方法和描述
1 GetValue() 返回切换按钮的状态(开/关)。
2 SetValue() 以编程方式设置按钮的状态

为了创建一个位图按钮,首先需要从一个图像文件中构建一个位图对象。

最常用的是wx.Bitmap类构造函数的以下变体—

Wx.Bitmap(fiiename, wx.BITMAP_TYPE)

一些预定义的位图类型常量有–

wx.BITMAP_TYPE_BMP

wx.BITMAP_TYPE_ICO

wx.BITMAP_TYPE_CUR

wx.BITMAP_TYPE_TIFF

wx.BITMAP_TYPE_TIF

wx.BITMAP_TYPE_GIF

wx.BITMAP_TYPE_PNG

wx.BITMAP_TYPE_JPEG

wx.BITMAP_TYPE_PCX

wx.BITMAP_TYPE_ICON

wx.BITMAP_TYPE_ANY

这个位图对象被用作wx.BitmapButton类构造函数的参数之一。

Wx.BitmapButton(parent, id, bitmap, pos, size, style)

在一些操作系统平台上,位图按钮可以同时显示位图和标签。SetLabel()方法分配了标题。在其他平台上,它作为一个内部标签。

普通按钮以及位图按钮都会发出一个wx.CommandEvent.EVT_BUTTON绑定器。EVT_BUTTON绑定器为其关联了一个处理函数。

另一方面,切换按钮使用wx.TOGLEBUTTON绑定器进行事件处理。

在下面的例子中,三种类型的按钮都被放置在一个面板的垂直盒状尺寸中。

简单的按钮对象是用语句创建的—

self.btn = wx.Button(panel, -1, "click Me")

切换按钮是由以下语句构成的 —

self.tbtn = wx.ToggleButton(panel , -1, "click to on")

这些按钮使用以下语句被添加到垂直分割器中-

vbox.Add(self.btn,0,wx.ALIGN_CENTER) 
vbox.Add(self.tbtn,0,wx.EXPAND|wx.ALIGN_CENTER)

注意 - 由于wx.EXPAND标志,切换按钮占据了整个框架的宽度。

使用EVT_BUTTON和EVT_TOGGLEBUTTON绑定器,它们与各自的处理程序相关。

self.btn.Bind(wx.EVT_BUTTON,self.OnClicked) 
self.tbtn.Bind(wx.EVT_TOGGLEBUTTON,self.OnToggle)

三个位图按钮被添加到一个水平的盒子尺寸中。这些按钮显示一个图像,作为其标题的图标。

bmp = wx.Bitmap("NEW.BMP", wx.BITMAP_TYPE_BMP) 
self.bmpbtn = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp,
   size = (bmp.GetWidth()+10, bmp.GetHeight()+10))

bmp1 = wx.Bitmap("OPEN.BMP", wx.BITMAP_TYPE_BMP) 
self.bmpbtn1 = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp1,
   size = (bmp.GetWidth()+10, bmp.GetHeight()+10))

bmp2 = wx.Bitmap("SAVE.BMP", wx.BITMAP_TYPE_BMP) 
self.bmpbtn2 = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp2,
   size = (bmp.GetWidth()+10, bmp.GetHeight()+10))

这三个按钮的点击事件被引向OnClicked()方法。

self.bmpbtn.Bind(wx.EVT_BUTTON, self.OnClicked) 
self.bmpbtn1.Bind(wx.EVT_BUTTON, self.OnClicked) 
self.bmpbtn2.Bind(wx.EVT_BUTTON, self.OnClicked)

这些按钮的内部标签分别被设置为新建、打开和保存。

OnClicked()事件处理函数检索源按钮的标签,它引起了点击事件。该标签被打印在控制台。

def OnClicked(self, event): 
   btn = event.GetEventObject().GetLabel() 
   print "Label of pressed button = ",btn 

当切换按钮被点击时,OnToggle()事件处理程序被触发。它的状态由GetValue()方法读取,相应地,按钮的标题被设置。

def OnToggle(self,event): 
   state = event.GetEventObject().GetValue() 
   if state == True: 
      print "off" 
      event.GetEventObject().SetLabel("click to off") 
   else: 
      print "on" 
      event.GetEventObject().SetLabel("click to on")

完整的代码列表如下-

import wx 
class Mywin(wx.Frame): 
   def __init__(self, parent, title): 
      super(Mywin, self).__init__(parent, title = title,size = (200,150))  
      panel = wx.Panel(self) 
      vbox = wx.BoxSizer(wx.VERTICAL) 

      self.btn = wx.Button(panel,-1,"click Me") 
      vbox.Add(self.btn,0,wx.ALIGN_CENTER) 
      self.btn.Bind(wx.EVT_BUTTON,self.OnClicked) 

      self.tbtn = wx.ToggleButton(panel , -1, "click to on") 
      vbox.Add(self.tbtn,0,wx.EXPAND|wx.ALIGN_CENTER) 
      self.tbtn.Bind(wx.EVT_TOGGLEBUTTON,self.OnToggle) 

      hbox = wx.BoxSizer(wx.HORIZONTAL) 

      bmp = wx.Bitmap("NEW.BMP", wx.BITMAP_TYPE_BMP) 
      self.bmpbtn = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp,
         size = (bmp.GetWidth()+10, bmp.GetHeight()+10)) 

      hbox.Add(self.bmpbtn,0,wx.ALIGN_CENTER) 
      self.bmpbtn.Bind(wx.EVT_BUTTON,self.OnClicked) 
      self.bmpbtn.SetLabel("NEW") 

      bmp1 = wx.Bitmap("OPEN.BMP", wx.BITMAP_TYPE_BMP) 
      self.bmpbtn1 = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp1,
         size = (bmp.GetWidth()+10, bmp.GetHeight()+10)) 

      hbox.Add(self.bmpbtn1,0,wx.ALIGN_CENTER) 
      self.bmpbtn1.Bind(wx.EVT_BUTTON,self.OnClicked) 
      self.bmpbtn1.SetLabel("OPEN") 

      bmp2 = wx.Bitmap("SAVE.BMP", wx.BITMAP_TYPE_BMP) 
      self.bmpbtn2 = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp2,
         size = (bmp.GetWidth()+10, bmp.GetHeight()+10))

      hbox.Add(self.bmpbtn2,0,wx.ALIGN_CENTER) 
      self.bmpbtn2.Bind(wx.EVT_BUTTON,self.OnClicked)
      self.bmpbtn2.SetLabel("SAVE") 

      vbox.Add(hbox,1,wx.ALIGN_CENTER) 
      panel.SetSizer(vbox) 

      self.Centre() 
      self.Show() 
      self.Fit()  

   def OnClicked(self, event): 
      btn = event.GetEventObject().GetLabel() 
      print "Label of pressed button = ",btn 

   def OnToggle(self,event): 
      state = event.GetEventObject().GetValue() 

      if state == True: 
         print "Toggle button state off" 
         event.GetEventObject().SetLabel("click to off") 
      else: 
         print " Toggle button state on" 
         event.GetEventObject().SetLabel("click to on") 

app = wx.App() 
Mywin(None,  'Button demo') 
app.MainLoop()

上述代码产生了以下输出—

wxPython - 按钮

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程