pickling problems with Pmw/Tkinter

Don Arnold darnold02 at sprynet.com
Sun Jul 28 11:45:06 EDT 2002


I'm trying to develop a Tkinter app that pickles the values of a couple of
Pmw counters. Then on its next run, it unpickles these values and loads them
back into the counters. That's the plan, anyway. Here's what I have:

import pickle, Pmw
from Tkinter import *

class OptionData(object):
    def __init__(self):
        self.minlenval = 0
        self.maxlenval = 0

class app(Frame):
    def __init__(self):
        self.picklefilename = '/python22/mystuff2/test.dat'
        self.options = OptionData()

        self.loadoptions()

        Frame.__init__(self)

        p2 = Pmw.Group(tag_text = 'Dictionary')

        self._minwordlen = Pmw.Counter(p2.interior(),
                labelpos = 'w',
                label_text = 'Minimum word length:',
                entry_width = 2,
                entryfield_value = self.options._minlenval,
                entryfield_validate = {'validator' : 'integer',
                        'min' : 1, 'max' : 20})

        self._maxwordlen = Pmw.Counter(p2.interior(),
                labelpos = 'w',
                label_text = 'Maximum word length:',
                entry_width = 2,
                entryfield_value = self.options._maxlenval,
                entryfield_validate = {'validator' : 'integer',
                        'min' : 1, 'max' : 20})

        fields = [self._minwordlen, self._maxwordlen]
        Pmw.alignlabels(fields)

        for field in fields:
            field.pack(side = TOP, padx = 5, pady = 5)

        p2.pack(fill = 'both', expand = 1, side = TOP)

        self.bind('<Destroy>',self.shutdown)

    def loadoptions(self):
        print 'loading options...'

        try:
            picklefile = file(self.picklefilename,'r')
            self.options = pickle.load(picklefile)
            print 'options loaded'
        except IOError:
            print 'using defaults'
            self.options._minlenval = 3
            self.options._maxlenval = 6

    def saveoptions(self):
        print 'saving options'

        self.options._minlenval = int(self._minwordlen.get())
        print 'min =', self.options._minlenval
        self.options._maxlenval = int(self._maxwordlen.get())
        print 'max =', self.options._maxlenval

        picklefile = file(self.picklefilename,'w')
        pickle.dump(self.options,picklefile)
        print 'options saved'


    def shutdown(self,e):
        print 'app shutting down'
        self.saveoptions()

root = Tk()
Pmw.initialise(root)
app().mainloop()


Here's what shows in my console window when I run it:

D:\Python22\mystuff2>test.py
loading options...
using defaults
<tkinter app executes>
app shutting down
saving options

D:\Python22\mystuff2>test.py
loading options...
using defaults
app shutting down
<tkinter app executes>
saving options

Not only aren't the options being saved, I'm not seeing any of the 'print'
lines in saveoptions() after the first. No exceptions are being raised, but
it's not working. Any ideas on what's happening here?

Thanks,
Don



More information about the Python-list mailing list