Tkinter vs. py2exe problem

msunderwd at gmail.com msunderwd at gmail.com
Wed Dec 5 10:53:58 EST 2007


On Dec 5, 10:46 am, msunde... at gmail.com wrote:
> On Dec 5, 10:07 am, msunde... at gmail.com wrote:
>
>
>
> > On Dec 5, 9:50 am, msunde... at gmail.com wrote:
>
> > > Having a problem with "compiling" a Tkinter/python program using
> > > py2exe (and pyinstaller, for that matter)...
>
> > > I have several dialogs that are derived from the tkSimpleDialog.Dialog
> > > class.  These work just fine if run through the interpreter.  When I
> > > "compile" this with py2exe, I don't see any errors, and when I execute
> > > the resulting program, it "appears" to work fine until I invoke one of
> > > the derived dialogs.
>
> > > Then, I get the "body" of the dialog, but no "OK" or "Cancel" button,
> > > and I get the following exception:
>
> > >                AttributeError: MyDialog instance has no attribute
> > > 'buttonbox'
>
> > > For reference, MyDialog is declared as follows:
> > > #--------------------------------------------------------------------------------
>
> > > from Tkinter import *
> > > import tkSimpleDialog
> > > class MyDialog(tkSimpleDialog.Dialog)
>
> > > #--------------------------------------------------------------------------------
>
> > > And my setup.py file looks like this:
>
> > > #--------------------------------------------------------------------------------
>
> > > from distutils.core import setup
> > > import py2exe
>
> > > setup(console=['tcgui3.py'])
>
> > > #--------------------------------------------------------------------------------
>
> > > I'm invoking py2exe like this:
>
> > > C:\python setup.py py2exe -p Tkinter -p tkSimpleDialog
>
> > > ??????
>
> > Nevermind.  I fixed it.  I had a tkSimpleDialog.py in my local
> > directory that was typed in from an introductory text.
>
> > Apparently this was confusing Python.  Removing that file, and letting
> > it find the tkSimpleDialog from Tk makes it work.
>
> > Thanks, anyway.
>
> Ummm... Un-nevermind.  I didn't fix it.  It's still complaining.

Okay, here's a sample program that fails:

#------------------------------------------------------------------
#!/usr/bin/python

from Tkinter import *
import tkSimpleDialog

class MyDialog(tkSimpleDialog.Dialog):
    def body(self, master):
        Label(master, text="Label").grid()

    def apply(self):
        print "OK"

if __name__ == "__main__":
    root = Tk()
    md = MyDialog(root)
    mainloop()

#--------------------------------------------

And here's the setup file I'm using with py2exe:

#--------------------------------------------
from distutils.core import setup
import py2exe

opts = {
    "py2exe": {
        "includes":"tkSimpleDialog"
        }
    }

setup(windows=['hellogui.py'], options=opts)

#--------------------------------------------

Can't make it any simpler than that... I'm so confused!



More information about the Python-list mailing list