Виджет кнопки наиболее широко используется в любом интерфейсе 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
Метка нажатой кнопки = ОТКРЫТО
Метка нажатой кнопки = СОХРАНИТЬ