[wxPython-users] A couple of questions...

Robin Dunn robin at alldunn.com
Fri Apr 27 09:58:21 PDT 2007


Jerry LeVan wrote:
> 
> On Apr 26, 2007, at 2:51 PM, Robin Dunn wrote:
> 
>> Jerry LeVan wrote:
>>> Hi,
>>> I recently picked up wxPython In Action and installed
>>> 1) Python 2.5.1 and wxPython 2.8.3 on my mac osx 10.4.9 system
>>> 2) Python 2.4.4 and wxPython 2.6.3 on my linux fc6 machine.
>>> In running through some examples from the source code in the wIA book
>>> I found that the Grid examples in Chapter 14 did not work properly.
>>> In particular, when scrolling the grid ( grid_table.py in chapter 14)
>>> using the scrollbars I found that the row and column headers did not
>>> scroll with the table!
>>> I found that if I forced an update by resizing the window header would
>>> be redrawn properly... It appears that the row/column headers are not
>>> being properly updated when the scrollbars are used.
>>> Using the "arrow" keys does cause the row/column heads to be properly
>>> updated.
>>> The examples *did* work on my linux box.
>>> Is this a known problem?
>>
>> Yes.  I thought it was fixed already, but I see that it is still 
>> happening in my local workspace.  I'll look into it again.
>>
>> BTW, you can workaround this in the meantime by forcing a cell editor 
>> to be created, because once the grid has a child window then the 
>> optimization that causes this problem is not used.  Something like this:
>>
>>     grid.EnableCellEditControl()
>>     grid.DisableCellEditControl()
>>
> 
> I don't seem to be able to create the editor ( probably because it
> is all new to me).
> 
> I *can* click in a cell and then scrolling works properly. I tried this
> but I don't get the cell editor ;(

It will work if you delay the hack until later, after the grid has had a 
chance to paint itself and finish configuring itself.  wxPython provides 
the wx.CallAfter function to help with things like this, it allows you 
to have a function called when the app is next idle:

class TestFrame(wx.Frame):
     def __init__(self):
         wx.Frame.__init__(self, None, title="Grid Table",
                           size=(640,480))

         grid = wx.grid.Grid(self)

         table = TestTable()
         grid.SetTable(table, True)

         wx.CallAfter(self.WorkaroundScrollBug, grid)

     def WorkaroundScrollBug(self, grid):
         grid.EnableCellEditControl()
         grid.DisableCellEditControl()


-- 
Robin Dunn
Software Craftsman
http://wxPython.org  Java give you jitters?  Relax with wxPython!





More information about the wxpython-users mailing list