[wxPython-users] Can anybody explain how to use
TransferDataToWindow/TransferDataFromWindow?
Thomas Weholt
thomas.weholt at gmail.com
Tue Jan 2 07:23:18 PST 2007
Ok, thanks for the example but I still got to set the value of each
control and get the value in the TransferFromWindow? Is there any
automagic-stuff going on anywhere? I don't see what the big hoopla
about Transfer[To|From]Window is, but it seems like it's the way
everybody does it anyway.
Thomas
On 1/2/07, jmf <jfauth at bluewin.ch> wrote:
> Hi Thomas,
>
> Below you will find an old, quick and dirty application I wrote once in order
> to learn this stuff. It was created with infos coming from this mailing list.
> Developed under wxPython 2.5.x, it just work out of the box with wxPy 2.8.0.1
> and may need some cleanings.
> With the hope, it helps.
>
> Jean-Michel Fauth, Switzerland
>
> # -*- coding: iso-8859-1 -*-
> #--------------------------------------------------------------------
> # Name: TransferFromDlg.py
> # Purpose: Test
> # Author: Jean-Michel Fauth, Switzerland
> # Copyright: (c) 2002-2004 Jean-Michel Fauth
> # Licence: GPL
> #--------------------------------------------------------------------
> # os dev: windows 98
> # py dev: Python 2.4
> # wx dev: wxPython 2.5.3.1
> # Revision: 19 January 2005
> #--------------------------------------------------------------------
>
> #~ At 2005-01-18 09:16 PM +0000, you wrote:
> #~ >I've been experimenting with passing information from a dialog to the main
> #~ >frame.Unfortunately, I've not come to a solution so far :( After I asked
> #~ >on freenode, I was told two thing and neither of them worked out. Here are
> #~ >they:
> #~ >1.Passing a variable to the constructor and changing it before destroying
> #~ >the control. This doesn't work, because the we're working with a copy of
> #~ >the var... I wished I could use C++ pointers :(
>
> #~ In your calling code, create a dictionary
> #~ context = {}
>
> #~ Pass it into your dialog class:
> #~ def __init__( self, context ):
> #~ ...
> #~ self.context = context
>
> #~ Use any values in 'context' to populate your widgets.
> #~ Override the TransferDataFromWindow method to copy
> #~ values back from the widgets to 'context'.
>
> #~ When ShowModal returns (in your calling code),
> #~ call dlog.TransferDataFromWindow(), and voila! the
> #~ values are in the dictionary.
>
> #~ HTH.
>
> #~ - Sam
>
> #--------------------------------------------------------------------
>
> import wx
>
> #-------------------------------------------------------------------
>
> class MyDialog(wx.Dialog):
>
> def __init__(self, parent, id, context):
> title = 'fenêtre de dialogue'
> pos, size = (-1, -1), (300, 300)
> wx.Dialog.__init__(self, parent, id, title, pos, size)
> self.CenterOnScreen()
>
> self.context = context
>
> self.but1 = wx.Button(self, wx.NewId(), '&ok', (10, 10), wx.DefaultSize)
> self.but1.Bind(wx.EVT_BUTTON, self.OnClick1)
>
> self.but2 = wx.Button(self, wx.NewId(), '&cancel', (10, 50),
> wx.DefaultSize)
> self.but2.Bind(wx.EVT_BUTTON, self.OnClick2)
>
> self.but3 = wx.Button(self, wx.NewId(), 'modify array', (130, 10),
> wx.DefaultSize)
> self.but3.Bind(wx.EVT_BUTTON, self.OnClick3)
>
> self.txt1 = wx.TextCtrl(self, wx.NewId(), 'aa bb cc', (10, 90), (100, -1))
> self.txt2 = wx.TextCtrl(self, wx.NewId(), 'mm nn oo', (10, 130), (100, -1))
>
> self.txt1.SetValue(self.context['txt1'])
> self.txt2.SetValue(self.context['txt2'])
>
> #~ self.Bind(wx.EVT_CHAR_HOOK, self.OnCharHook)
>
> def TransferDataFromWindow(self):
> self.context['txt1'] = self.txt1.GetValue()
> self.context['txt2'] = self.txt2.GetValue()
>
> def OnClick1(self, event):
> self.EndModal(wx.ID_OK)
>
> def OnClick2(self, event):
> self.EndModal(wx.ID_CANCEL)
>
> def OnClick3(self, event):
> for i in xrange(len(self.context['ary'])):
> self.context['ary'][i] += 0.123
> print self.context['ary'][i],
> print
>
> #~ def OnCharHook(self, event):
> #~ if event.KeyCode() == wx.WXK_ESCAPE:
> #~ self.EndModal(wx.ID_CANCEL)
> #~ else:
> #~ event.Skip()
>
> #-------------------------------------------------------------------
>
> class MyPanel(wx.Panel):
>
> def __init__(self, parent, id):
> wx.Panel.__init__(self, parent, id, wx.DefaultPosition, wx.DefaultSize)
>
> self.but1 = wx.Button(self, wx.NewId(), 'dialog', (10, 10), wx.DefaultSize)
> self.but1.Bind(wx.EVT_BUTTON, self.OnClick1)
>
> self.context = {'txt1': 'aaa', 'txt2': 'bbb', 'ary': range(5)}
>
> def OnClick1(self, event):
> dlg = MyDialog(self, wx.NewId(), self.context)
> r = dlg.ShowModal()
> if r == wx.ID_CANCEL:
> print 'cancel'
> print self.context
> elif r == wx.ID_OK:
> print 'ok'
> r2 = dlg.TransferDataFromWindow()
> print 'r2:', r2
> print self.context
> else:
> pass
> dlg.Destroy()
>
> #--------------------------------------------------------------------
>
> class MyFrame(wx.Frame):
>
> def __init__(self, parent, id, title, pos, size, style):
> wx.Frame.__init__(self, parent, id, title, pos, size, style)
> #~ self.CentreOnScreen()
>
> self.panel = MyPanel(self, wx.NewId())
>
> self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
>
> def OnCloseWindow(self, event):
> self.Destroy()
>
> #--------------------------------------------------------------------
>
> class MyApp(wx.App):
>
> def OnInit(self):
> sty = wx.DEFAULT_FRAME_STYLE
> #~ sty = wx.SYSTEM_MENU | wx.CAPTION | wx.MINIMIZE_BOX | wx.CLOSE_BOX
> frame = MyFrame(None, -1, __file__, (0, 0), (300, 200), sty)
> frame.Show(True)
> self.SetTopWindow(frame)
> return True
>
> #--------------------------------------------------------------------
>
> def main():
> app = MyApp(False)
> app.MainLoop()
>
> #--------------------------------------------------------------------
>
> if __name__ == "__main__":
> main()
>
> #eof-----------------------------------------------------------------
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: wxPython-users-unsubscribe at lists.wxwidgets.org
> For additional commands, e-mail: wxPython-users-help at lists.wxwidgets.org
>
>
--
Mvh/Best regards,
Thomas Weholt
http://www.weholt.org
More information about the wxpython-users
mailing list