python - wxPython Displaying Grid in BoxSizer -


i trying display grid along button navigating through table on wx.panel using wx.boxsizer. can grid , buttons show correctly if add buttons first boxsizer buttons on top of grid in vertical layout. if switch order around grid on top of buttons in vertical layout, buttons not display grid take entire panel.

works:

    self.sizer.addspacer(10)     self.sizer.add(self.bottombtnspnl,1,wx.expand)     self.sizer.addspacer(10)     self.sizer.add(self.gridpnl,1,wx.expand)     self.sizer.addspacer(10) 

does not work:

    self.sizer.addspacer(10)     self.sizer.add(self.gridpnl,1,wx.expand)     self.sizer.addspacer(10)     self.sizer.add(self.bottombtnspnl,1,wx.expand)     self.sizer.addspacer(10) 

all code: tableview.py:

import wx tfmtable import tfmemployeegridtable  class tableview(wx.panel):     def __init__(self, parent, id, db):         wx.panel.__init__(self, parent, id)         self.sizer = wx.boxsizer(wx.vertical)          self.gridpnl = wx.panel(self,1)         self.gridpnlsizer = wx.boxsizer(wx.vertical)          if db.gettfmemployeerowcount() >= 100:             self.tfmemployeegrid = tfmemployeegridtable(self.gridpnl, gridrows=db.gettfmemployeerowcount(), rows=db.gettfmemployee100rows(0,100))         else:             self.tfmemployeegrid = tfmemployeegridtable(self.gridpnl, gridrows=db.gettfmemployeerowcount(), rows=db.gettfmemployee100rows(0,db.gettfmemployeerowcount()))          self.gridpnlsizer.add(self.tfmemployeegrid,1,wx.expand)           self.gridpnl.setautolayout(true)         self.gridpnl.setsizer(self.gridpnlsizer)         self.gridpnlsizer.fit(self.gridpnl)           self.bottombtnspnl = wx.panel(self,1)         self.bottomsizer = wx.boxsizer(wx.horizontal)          self.beginningbtn =wx.button(self.bottombtnspnl, 0, label='<<')         self.backbtn =wx.button(self.bottombtnspnl, 0, label='<')         self.editbtn =wx.button(self.bottombtnspnl, 0, label='edit')         self.nextbtn =wx.button(self.bottombtnspnl, 0, label='>')         self.lastbtn =wx.button(self.bottombtnspnl, 0, label='>>')          self.bottomsizer.addstretchspacer()         self.bottomsizer.add(self.beginningbtn,0,wx.expand)         self.bottomsizer.addspacer(10)         self.bottomsizer.add(self.backbtn,0,wx.expand)         self.bottomsizer.addspacer(10)         self.bottomsizer.add(self.editbtn,0,wx.expand)         self.bottomsizer.addspacer(10)         self.bottomsizer.add(self.nextbtn,0,wx.expand)         self.bottomsizer.addspacer(10)         self.bottomsizer.add(self.lastbtn,0,wx.expand)         self.bottomsizer.addstretchspacer()           self.bottombtnspnl.setautolayout(true)         self.bottombtnspnl.setsizer(self.bottomsizer)         self.bottomsizer.fit(self.bottombtnspnl)           self.sizer.addspacer(10)         self.sizer.add(self.gridpnl,1,wx.expand)         self.sizer.addspacer(10)         self.sizer.add(self.bottombtnspnl,1,wx.expand)         self.sizer.addspacer(10)          self.setautolayout(true)         self.setsizer(self.sizer)         self.sizer.fit(self) 

tfmtable.py:

import wx import wx.grid  class tfmemployeegridtable(wx.grid.grid):     def __init__(self, parent, gridrows, rows):          wx.grid.grid.__init__(self, parent)         self.creategrid(100,7)         self.setcollabelvalue(0, "id")         self.setcollabelvalue(1, "employeenumber")         self.setcollabelvalue(2, "roomnum")         self.setcollabelvalue(3, "last")         self.setcollabelvalue(4, "first")         self.setcollabelvalue(5, "wage")         self.setcollabelvalue(6, "datestated")          row = 0         items in rows:             if row==0:                 self.setcellvalue(row,0,str(items[0]))                 self.setcellbackgroundcolour(row, 0, wx.light_grey)                 self.setcellvalue(row,1,str(items[1]))                 self.setcellbackgroundcolour(row, 1, wx.light_grey)                 self.setcellvalue(row,2,str(items[2]))                 self.setcellbackgroundcolour(row, 2, wx.light_grey)                 self.setcellvalue(row,3,str(items[3]))                 self.setcellbackgroundcolour(row, 3, wx.light_grey)                 self.setcellvalue(row,4,str(items[4]))                 self.setcellbackgroundcolour(row, 4, wx.light_grey)                 self.setcellvalue(row,5,str(items[5]))                 self.setcellbackgroundcolour(row, 5, wx.light_grey)                 self.setcellvalue(row,6,str(items[6]))                 self.setcellbackgroundcolour(row, 6, wx.light_grey)             elif row%2==0:                 self.setcellvalue(row,0,str(items[0]))                 self.setcellbackgroundcolour(row, 0, wx.light_grey)                 self.setcellvalue(row,1,str(items[1]))                 self.setcellbackgroundcolour(row, 1, wx.light_grey)                 self.setcellvalue(row,2,str(items[2]))                 self.setcellbackgroundcolour(row, 2, wx.light_grey)                 self.setcellvalue(row,3,str(items[3]))                 self.setcellbackgroundcolour(row, 3, wx.light_grey)                 self.setcellvalue(row,4,str(items[4]))                 self.setcellbackgroundcolour(row, 4, wx.light_grey)                 self.setcellvalue(row,5,str(items[5]))                 self.setcellbackgroundcolour(row, 5, wx.light_grey)                 self.setcellvalue(row,6,str(items[6]))                 self.setcellbackgroundcolour(row, 6, wx.light_grey)             else:                 self.setcellvalue(row,0, ""+str(items[0]))                 self.setcelltextcolour(row, 0, wx.black)                 self.setcellbackgroundcolour(row, 0, wx.white)                 self.setcellvalue(row,1, ""+str(items[1]))                 self.setcelltextcolour(row, 1, wx.black)                 self.setcellbackgroundcolour(row, 1, wx.white)                 self.setcellvalue(row,2, ""+str(items[2]))                 self.setcelltextcolour(row, 2, wx.black)                 self.setcellbackgroundcolour(row, 2, wx.white)                 self.setcellvalue(row,3, ""+str(items[3]))                 self.setcelltextcolour(row, 3, wx.black)                 self.setcellbackgroundcolour(row, 3, wx.white)                 self.setcellvalue(row,4, ""+str(items[4]))                 self.setcelltextcolour(row, 4, wx.black)                 self.setcellbackgroundcolour(row, 4, wx.white)                 self.setcellvalue(row,5, ""+str(items[5]))                 self.setcelltextcolour(row, 5, wx.black)                 self.setcellbackgroundcolour(row, 5, wx.white)                 self.setcellvalue(row,6, ""+str(items[6]))                 self.setcelltextcolour(row, 6, wx.black)                 self.setcellbackgroundcolour(row, 6, wx.white)              row = row+1          self.setselectionmode(wx.grid.grid.selectrows)           self.bind(wx.grid.evt_grid_cell_left_click, self.cellleftclick, self)       def cellleftclick(self,e):         print("click on grid") 

you can self-diagnose visual layout problems using wxpython widget inspection tool, can read here:

it show how widgets overlap, widget's parent is, size widget is, etc. noticed setting self.gridpnl's id 1. bad. ids less 100 reserved wxpython, why see magic -1 or wx.id_any in example apps online. -1 , wx.id_any tell wxpython dynamically create id won't conflict other ids in use.

finally, here's super simple example shows how create grid couple of buttons underneath it:

import wx import wx.grid gridlib  ######################################################################## class myform(wx.frame):     """"""      #----------------------------------------------------------------------     def __init__(self):         """constructor"""         wx.frame.__init__(self, parent=none, title="a simple grid")         panel = wx.panel(self)          mygrid = gridlib.grid(panel)         mygrid.creategrid(12, 8)          btn_sizer = wx.boxsizer(wx.horizontal)         btn_one = wx.button(panel, label="one")         btn_sizer.add(btn_one, 0, wx.center|wx.all, 5)          btn_two = wx.button(panel, label="two")         btn_sizer.add(btn_two, 0, wx.center|wx.all, 5)          sizer = wx.boxsizer(wx.vertical)         sizer.add(mygrid, 1, wx.expand)         sizer.add(btn_sizer)         panel.setsizer(sizer)  if __name__ == "__main__":     app = wx.app(false)     frame = myform()     frame.show()     app.mainloop() 

Comments

Popular posts from this blog

javascript - Jquery show_hide, what to add in order to make the page scroll to the bottom of the hidden field once button is clicked -

javascript - Highcharts multi-color line -

javascript - Enter key does not work in search box -