Hi!
I've been working on this app last days, and can't get passed this problem:
I've created two windows, (one is created by a button click in the first
window), and from the other window I want to change some variables defined
in the first window.

I'm guessing either I haven't understood the whole parent thingy, or messed
up somewhere there.

The source code is:
(there's some translations and explanations below)


#!/usr/bin/python
# -*- coding: utf-8 -*-

from __future__ import division
import Tkinter


class enhetsomvandlare_tk(Tkinter.Tk):
    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent)
        self.parent = parent
        self.initialize()


    def initialize(self):
        self.grid()

        self.LV = Tkinter.StringVar()
        label = Tkinter.Label(self,textvariable=self.LV,
                              anchor="w",fg="white",bg="blue")
        label.grid(column=0,row=0,columnspan=1,sticky='EW')
        self.LV.set(u"Lbs to Kg")

        global enhet
        enhet = "lbstokg"


        self.entryVariable1 = Tkinter.StringVar()
        self.entry = Tkinter.Entry(self,textvariable=self.entryVariable1)
        self.entry.grid(column=0,row=1,sticky='W')
        self.entry.bind("<Return>", self.OnPressEnter)
        self.entryVariable1.set(u"")

        self.entryVariable2 = Tkinter.StringVar()
        self.entry = Tkinter.Entry(self,textvariable=self.entryVariable2)
        self.entry.grid(column=1,row=1,sticky='W')
        self.entry.bind("<Return>", self.OnPressEnter)
        self.entryVariable2.set(u"")



        raknaknapp = Tkinter.Button(self,text=u"Räkna ut!",
                                command=self.Onraknaknapp1)
        raknaknapp.grid(column=2,row=1)

        Change_units = Tkinter.Button(self,text=u"Change Units",
                                command=self.OnChange_units)
        Change_units.grid(column=1,row=2)


        self.grid_columnconfigure(0,weight=1)
        self.grid_columnconfigure(1,weight=1)
        self.grid_columnconfigure(2,weight=1)
        self.resizable(True,False)
        self.update()
        self.geometry(self.geometry())




    def Onraknaknapp1(self):
        if enhet == "lbstokg":
                lbs = float(self.entryVariable1.get())
                kg = lbs / 0.455
                self.entryVariable2.set(kg)

        elif enhet == "kgtolbs":
                kg = float(self.entryVariable1.get())
                lbs = kg * 0.455
                self.entryVariable2.set(lbs)



    def OnChange_units(self):

        class Change_units_tk(Tkinter.Tk):
            def __init__(self,parent):
                Tkinter.Tk.__init__(self,parent)
                self.parent = parent
                self.initialize()

            def initialize(self):
                self.grid()

                self.LV2 = Tkinter.StringVar()
                label = Tkinter.Label(self,textvariable=self.LV2,
                                              anchor="w",fg="white",bg="blue")
                label.grid(column=0,row=0,columnspan=2,sticky='EW')
                self.LV2.set(u"Choose Unit...")

                kgtolbs = Tkinter.Button(self,text=u"Kg to lbs",
                                command=self.Onkgtolbs)
                kgtolbs.grid(column=0,row=1)

                lbstokg = Tkinter.Button(self,text=u"Lbs to kg",
                                command=self.Onlbstokg)
                lbstokg.grid(column=1,row=1)

                self.grid_columnconfigure(0,weight=1)
                self.grid_columnconfigure(1,weight=1)
                self.grid_columnconfigure(2,weight=1)
                self.resizable(True,False)
                self.update()
                self.geometry(self.geometry())

            def Onkgtolbs(self):
                self.LV.set("Kg to lbs")
                global enhet
                enhet = "kgtolbs"

            def Onlbstokg(self):
                self.LV.set("Lbs to kg")
                global enhet
                enhet = "lbstokg"


        if __name__ == "__main__":
            app = Change_units_tk(enhetsomvandlare_tk)
            app.title("What unit?")


    def OnPressEnter(self,event):
        self.LV.set( "Hej" )



if __name__ == "__main__":
    app = enhetsomvandlare_tk(None)
    app.title("Robert's Enhetsomvandlare")
    app.mainloop()



(Some things are swedish, so I'll translate them to make this easier to
understand)
Legend for my code:

enhet = unit
LV = Labelvariable
raknaknapp = calculatebutton
Räkna ut = calculate






Now as soon as I get the crossover thing to work I'll start adding more
math, functions and other things to it to make it useful. But right now I
want to get rid of this error message:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1413, in __call__
    return self.func(*args)
  File "/home/robert/Desktop/programmering/python/12 enhets
omvandlare/12.py", line 118, in OnChange_units
    app = Change_units_tk(enhetsomvandlare_tk)
  File "/home/robert/Desktop/programmering/python/12 enhets
omvandlare/12.py", line 78, in __init__
    Tkinter.Tk.__init__(self,parent)
  File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1646, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive,
wantobjects, useTk, sync, use)
TypeError: create() argument 1 must be string or None, not classobj

OR

when i have the line:
 app = Change_units_tk(enhetsomvandlare_tk)
changed to:
 app = Change_units_tk(None)
I will get the error message:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1413, in __call__
    return self.func(*args)
  File "/home/robert/Desktop/programmering/python/12 enhets
omvandlare/12.py", line 107, in Onkgtolbs
    self.LV.set("Kg to lbs")
  File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1725, in __getattr__
    return getattr(self.tk, attr)
AttributeError: LV

Which is the one I really don't get...



Anyways, I've searched the net for some help, but couldn't find anything
really helpful. (I know I probably missed it, but this was easier... :P)

Help is appreciated, (I'm a first time poster).

Have a nice day! :)

/Robert
-- 
View this message in context: 
http://old.nabble.com/Multiple-windows%2C-accessing-variables-across-them-won%27t-work-for-me-%28Using-Tkinter%29-tp29503063p29503063.html
Sent from the Python - tkinter-discuss mailing list archive at Nabble.com.

_______________________________________________
Tkinter-discuss mailing list
Tkinter-discuss@python.org
http://mail.python.org/mailman/listinfo/tkinter-discuss

Reply via email to