By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
444,002 Members | 1,171 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 444,002 IT Pros & Developers. It's quick & easy.

How to update window after wxGrid is updated?

P: n/a
Hi.

I'm starting to learn wxPython and for an exercise I'm writing a
simple CSV file viewer. I just read in the CSV file and create a
wx.Grid with the data. I'm using Python 2.3.2 with wxPython 2.4.2.4.

Everything runs fine under linux, but when I try the same code on a
Win XP machine, I have a window, but the frame the grid is in isn't
seen until I do a minimize/maximize on the window. Besides that, it
seems to run fine. I tried to do a self.Refresh(True,
self.grid.GetRect()), but that didn't help.

Here is the code:

#!/bin/env python

"""
Python script to display CSV file in a table using wxPython
"""

import os, sys, csv
import wx, wx.grid

class MyFrame(wx.Frame):
def __init__(self, parent, ID, title, size=(200,200)):
wx.Frame.__init__(self, parent, ID, title,
(-1,-1),size)
self.CreateStatusBar()

self.dirname=os.getcwd()

#create the file menu
filemenu=wx.Menu()
filemenu.Append(wx.ID_OPEN, '&Open', 'Open CSV File')
filemenu.Append(wx.ID_EXIT, 'E&xit', 'Exit the program')

#create the menubar for the frame and add the menu to it
menuBar=wx.MenuBar()
menuBar.Append(filemenu, '&File')
self.SetMenuBar(menuBar)

#set up menu events
wx.EVT_MENU(self, wx.ID_OPEN, self.OnOpen)
wx.EVT_MENU(self, wx.ID_EXIT, self.Exit)

self.Show(True)
return

def OnOpen(self, event):
dlg=wx.FileDialog(self, 'Choose a file',
self.dirname, '',
'CSV files (*.csv)|*.csv|All files
(*.*)|*.*',
wx.OPEN)
if dlg.ShowModal() == wx.ID_OK:
self.dirname=dlg.GetDirectory()
self.filename=os.path.join(self.dirname,dlg.GetFil ename())
self.file=file(self.filename, 'r')
csvfile=csv.reader(self.file)

#grab a sample and see if there is a header
sample=self.file.read(8192)
self.file.seek(0)
if csv.Sniffer().has_header(sample):
colnames=csvfile.next()
else:
row=csvfile.next()
colnames=[]
for i in len(row):
colnames.append('col%d' % i)
self.file.seek(0)

if getattr(self, 'grid', 0): self.grid.Destroy()
self.grid=wx.grid.Grid(self, -1)
self.grid.CreateGrid(0, len(colnames))

#fill in headings
for i in range(len(colnames)):
self.grid.SetColLabelValue(i, colnames[i])

#fill in rows
r=0
for row in csvfile:
self.grid.AppendRows(1)
for i in range(len(row)):
try:
self.grid.SetCellValue(r, i, row[i])
except:
self.grid.AppendCols(1, True)
print r, i, len(row), row[i]
r += 1
self.file.close()
self.grid.AutoSizeColumns(True)
self.Refresh(True, self.grid.GetRect())

def Exit(self, event):
if getattr(self, 'file',0):
self.file.close()
self.Close(True)

class csv_view(wx.App):
def OnInit(self):
self.frame=MyFrame(None, -1, 'CSV viewer', size=(800,500))
self.SetTopWindow(self.frame)
return True

if __name__ == '__main__':
app=csv_view()
app.MainLoop()

##########################

Thanks for any help.
Jul 18 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
Tim Williams wrote:
Hi.

I'm starting to learn wxPython and for an exercise I'm writing a
simple CSV file viewer. I just read in the CSV file and create a
wx.Grid with the data. I'm using Python 2.3.2 with wxPython 2.4.2.4.

Everything runs fine under linux, but when I try the same code on a
Win XP machine, I have a window, but the frame the grid is in isn't
seen until I do a minimize/maximize on the window. Besides that, it
seems to run fine. I tried to do a self.Refresh(True,
self.grid.GetRect()), but that didn't help.
Annoying isn't it? There are probably many solutions to this problem,
but the one that I use is:
self.grid.AutoSizeColumns(True)
#self.Refresh(True, self.grid.GetRect())

self.twiddle()

def twiddle(self):
x,y = self.GetSize()
self.SetSize((x, y+1))
self.SetSize((x,y))

This forces a repaint of the window and will also add scroll bars if
necessary. You are welcome to join us on the wxpython user list as well
for more in-depth answers.

You have an unrelated bug in your code as well:

for i in len(row):

should be
for i in range(len(row)):
Brian
Jul 18 '05 #2

P: n/a
Tim Williams wrote:
Hi.

I'm starting to learn wxPython and for an exercise I'm writing a
simple CSV file viewer. I just read in the CSV file and create a
wx.Grid with the data. I'm using Python 2.3.2 with wxPython 2.4.2.4.

Everything runs fine under linux, but when I try the same code on a
Win XP machine, I have a window, but the frame the grid is in isn't
seen until I do a minimize/maximize on the window. Besides that, it
seems to run fine. I tried to do a self.Refresh(True,
self.grid.GetRect()), but that didn't help.


I believe wx.Yield() should do the trick.

Jul 18 '05 #3

P: n/a
Brian Kelley <bk*****@wi.mit.edu> wrote in message news:<40*********************@senator-bedfellow.mit.edu>...
Tim Williams wrote:
Hi.

I'm starting to learn wxPython and for an exercise I'm writing a
simple CSV file viewer. I just read in the CSV file and create a
wx.Grid with the data. I'm using Python 2.3.2 with wxPython 2.4.2.4.

Everything runs fine under linux, but when I try the same code on a
Win XP machine, I have a window, but the frame the grid is in isn't
seen until I do a minimize/maximize on the window. Besides that, it
seems to run fine. I tried to do a self.Refresh(True,
self.grid.GetRect()), but that didn't help.


Annoying isn't it? There are probably many solutions to this problem,
but the one that I use is:
> self.grid.AutoSizeColumns(True)
> #self.Refresh(True, self.grid.GetRect())

self.twiddle()

def twiddle(self):
x,y = self.GetSize()
self.SetSize((x, y+1))
self.SetSize((x,y))

This forces a repaint of the window and will also add scroll bars if
necessary. You are welcome to join us on the wxpython user list as well
for more in-depth answers.

You have an unrelated bug in your code as well:

for i in len(row):

should be
for i in range(len(row)):
Brian


Thanks. I caught this bug after I posted. I've been in a class the
last 3 days. When I get back on Monday, I'll try out your answer and
the other poster's one.
Jul 18 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.