Учебники

wxPython — кнопки

Виджет кнопки наиболее широко используется в любом интерфейсе GUI. Он фиксирует событие нажатия, созданное пользователем. Его наиболее очевидное использование — запуск связанной с ним функции-обработчика.

Библиотека классов wxPython предоставляет различные типы кнопок. Есть простая, традиционная кнопка, объект класса wx.Button , который содержит некоторый текст в качестве заголовка. Также доступна кнопка с двумя состояниями, которая называется wx.ToggleButton . Его нажатое или подавленное состояние может быть идентифицировано функцией обработчика событий.

Кнопка другого типа, wx.BitmapButton, отображает растровое изображение (изображение) в виде значка на своем лице.

Конструктор для класса wx.Button и класса wx.ToggleButton принимает следующие аргументы:

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

Вот некоторые важные методы класса wx.Button —

SN Методы и описание
1

SetLabel ()

Устанавливает заголовок кнопки программно

2

GetLabel ()

Возвращает заголовок кнопки

3

Установить по умолчанию()

Кнопка установлена ​​по умолчанию для окна верхнего уровня. Эмулирует событие нажатия при нажатии клавиши Enter

SetLabel ()

Устанавливает заголовок кнопки программно

GetLabel ()

Возвращает заголовок кнопки

Установить по умолчанию()

Кнопка установлена ​​по умолчанию для окна верхнего уровня. Эмулирует событие нажатия при нажатии клавиши Enter

Два важных метода класса wx.ToggleButton —

SN Методы и описание
1

ПолучитьЗначение ()

Возвращает состояние переключателя (вкл / выкл)

2

SetValue ()

Устанавливает состояние кнопки программно

ПолучитьЗначение ()

Возвращает состояние переключателя (вкл / выкл)

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 связывает с ним функцию-обработчик.

Кнопка переключения с другой стороны использует механизм связывания wx.TOGGLEBUTTON для обработки событий.

В следующем примере кнопки всех трех типов размещаются в вертикальном блоке размеров панели.

Простой объект кнопки создается с помощью оператора —

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)

Внутренние метки этих кнопок установлены на NEW, OPEN и SAVE соответственно.

Функция обработчика события OnClicked () извлекает метку кнопки источника, которая вызвала событие click. Эта этикетка напечатана на консоли.

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()

Приведенный выше код производит следующий вывод —

Вывод кнопок

Метка нажатой кнопки = нажмите Me

Отключить состояние кнопки

Переключить состояние кнопки на

Метка нажатой кнопки = NEW

Метка нажатой кнопки = ОТКРЫТО

Метка нажатой кнопки = СОХРАНИТЬ