associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

BásicoBoaConstructor

Receita: BoaConstructor eventos e grid

Um simples uso do wx com boa-constructor que mostra como utilizar o evento onclick do mouse, mudança de conteúdo de caixas de textos e utilização de grids.

módulo principal da aplicação

A maioria dos códigos já são gerados automaticamente pelo boa, porém existem algumas incompatibilidades que vou comentar adiante.

   1 #Boa:App:BoaApp
   2 
   3 import wx
   4 
   5 import Frame1
   6 #o frame2 em modules foi adicionado mas não possui muita finalidade
   7 modules ={'Frame1': [1, 'Main frame of Application', 'Frame1.py'],
   8  'Frame2': [0, 'Grid', 'Frame2.py']}
   9 
  10 class BoaApp(wx.App):
  11     def OnInit(self):
  12         wx.InitAllImageHandlers()
  13         self.main = Frame1.create(None)
  14         self.main.Show()
  15         self.SetTopWindow(self.main)
  16         return True
  17 
  18 def main():
  19     application = BoaApp(0)
  20     application.MainLoop()
  21 
  22 if __name__ == '__main__':
  23     main()

Primeiro Frame

   1 #Boa:Frame:Frame1
   2 
   3 import wx
   4 #importar o 2ºFrame
   5 import Frame2
   6 
   7 def create(parent):
   8     return Frame1(parent)
   9 
  10 [wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1BUTTON2, wxID_FRAME1PANEL1, 
  11  wxID_FRAME1STATICTEXT1, wxID_FRAME1STATICTEXT2, wxID_FRAME1TEXT1, 
  12  wxID_FRAME1TEXT2, 
  13 ] = [wx.NewId() for _init_ctrls in range(8)]
  14 
  15 class Frame1(wx.Frame):
  16     def _init_ctrls(self, prnt):
  17         # generated method, don't edit
  18         #metodo gerenciado pelo boa, usado para construir os componentes para visualização e 
  19 #edição, o boa vai excluir este comentário ao visualizar o Frame
  20         wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
  21               pos=wx.Point(427, 265), size=wx.Size(289, 182),
  22               style=wx.DEFAULT_FRAME_STYLE, title='Frame1')
  23         self.SetClientSize(wx.Size(281, 155))
  24 
  25         self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self,
  26               pos=wx.Point(0, 0), size=wx.Size(281, 148),
  27               style=wx.TAB_TRAVERSAL)
  28 
  29         self.staticText1 = wx.StaticText(id=wxID_FRAME1STATICTEXT1,
  30               label='label1', name='staticText1', parent=self.panel1,
  31               pos=wx.Point(48, 24), size=wx.Size(28, 13), style=0)
  32 
  33         self.staticText2 = wx.StaticText(id=wxID_FRAME1STATICTEXT2,
  34               label='label2', name='staticText2', parent=self.panel1,
  35               pos=wx.Point(168, 24), size=wx.Size(28, 13), style=0)
  36 
  37         self.text2 = wx.TextCtrl(id=wxID_FRAME1TEXT2, name='text2',
  38               parent=self.panel1, pos=wx.Point(160, 40), size=wx.Size(100, 21),
  39               style=0, value='DEF')
  40 
  41         self.text1 = wx.TextCtrl(id=wxID_FRAME1TEXT1, name='text1',
  42               parent=self.panel1, pos=wx.Point(40, 40), size=wx.Size(100, 21),
  43               style=0, value='abc')
  44         #cria um botão
  45         self.button1 = wx.Button(id=wxID_FRAME1BUTTON1, label='executar',
  46               name='button1', parent=self.panel1, pos=wx.Point(48, 96),
  47               size=wx.Size(75, 23), style=0)
  48         self.button1.SetToolTipString('executar')
  49         #declara evento de um botão
  50         self.button1.Bind(wx.EVT_BUTTON, self.OnButton1Button,
  51               id=wxID_FRAME1BUTTON1)
  52 
  53         self.button2 = wx.Button(id=wxID_FRAME1BUTTON2, label='Grid',
  54               name='button2', parent=self.panel1, pos=wx.Point(160, 96),
  55               size=wx.Size(75, 23), style=0)
  56         self.button2.Bind(wx.EVT_BUTTON, self.OnButton2Button,
  57               id=wxID_FRAME1BUTTON2)
  58 
  59     def __init__(self, parent):
  60         self._init_ctrls(parent)
  61 
  62     #ao clicar no botão 1
  63     def OnButton1Button(self, event):
  64         #existem vários métodos de trabalhar com os valores de caixa de textos,
  65         #optei por estes por parecerem bem simples
  66         a = self.text1.GetValue()
  67         b = self.text2.GetValue()
  68         self.text1.SetValue(b)
  69         self.text2.SetValue(a)
  70 
  71     #ao clicar no botão 2
  72     def OnButton2Button(self, event):
  73         #igualzin no Delphi :)
  74         frm2 = Frame2.create(None)
  75         frm2.Show()

segundo frame

Também existem vários métodos de trabalho com grids, o createGrid, o mais simples em minha opinião, acabou ficando com um bug no boa, mas funciona perfeitamente na execução.

Para poder visuallizar o grid no boa, deixei a chamada do método createGrid fora do método _init_ctrls do frame,se bem que não dá pra editar muitas propriedades da forma que eu fiz, pois os dados ainda serão buscados de uma fonte qualquer, e o tamanho dos campos se adequarão automaticamente.

   1 #Boa:Frame:Frame2
   2 
   3 import wx
   4 import wx.grid
   5 import wx.calendar
   6 
   7 def create(parent):
   8     return Frame2(parent)
   9 
  10 [wxID_FRAME2, wxID_FRAME2CALENDARCTRL1, wxID_FRAME2GRID1, wxID_FRAME2PANEL1, 
  11 ] = [wx.NewId() for _init_ctrls in range(4)]
  12 
  13 class Frame2(wx.Frame):
  14     def _init_ctrls(self, prnt):
  15         # generated method, don't edit
  16         wx.Frame.__init__(self, id=wxID_FRAME2, name='', parent=prnt,
  17               pos=wx.Point(70, 40), size=wx.Size(892, 685),
  18               style=wx.DEFAULT_FRAME_STYLE, title='Grid')
  19         self.SetClientSize(wx.Size(884, 658))
  20 
  21         self.panel1 = wx.Panel(id=wxID_FRAME2PANEL1, name='panel1', parent=self,
  22               pos=wx.Point(0, 0), size=wx.Size(884, 658),
  23               style=wx.TAB_TRAVERSAL)
  24         #coloquei um calendário só porque achei fácil
  25         self.calendarCtrl1 = wx.calendar.CalendarCtrl(date=wx.DateTime.Now(),
  26               id=wxID_FRAME2CALENDARCTRL1, name='calendarCtrl1',
  27               parent=self.panel1, pos=wx.Point(16, 16), size=wx.Size(172, 137),
  28               style=wx.calendar.CAL_SHOW_HOLIDAYS)
  29 
  30         self.grid1 = wx.grid.Grid(name='grid1', parent=self.panel1,
  31               pos=wx.Point(16, 168), size=wx.Size(100, 100), style=1)
  32 
  33     def __init__(self, parent):
  34         
  35         self._init_ctrls(parent)
  36         self.grid1.CreateGrid(1, 1, self.grid1.wxGridSelectCells)
  37         dados = self.dados()
  38         #criação de celulas, de tamanho correspondente aos dados que se quer visualizar
  39         self.grid1.AppendCols(len(dados[1])-1)
  40         self.grid1.AppendRows(len(dados)-1)
  41         #preenchimento das células
  42         for registro in range(len(dados)):
  43             for dado in range(len(dados[registro])):
  44                 self.grid1.SetCellValue(registro , dado, dados[registro][dado])
  45         #Também existe o SetRowLabelValue
  46         self.grid1.SetColLabelValue(0,'label')
  47         self.grid1.AutoSize()
  48 
  49     def dados(self):
  50         import seuJeitoDeObterDados.obterDados as obterDados
  51         #retorna uma lista de listas.Ex:
  52         #[['Josivaldo','22','M','aux.adm.'],['Marlene','19', 'F','secretária'],['Simone','20','F','Enc.DP']]
  53         _dados = str(obterDados.obter())
  54         return _dados

Volta para CookBook.


saviorangel