how to get values form the custom widget module to the parent frame widget in Tkinter?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

how to get values form the custom widget module to the parent frame widget in Tkinter?

deepak
This post has NOT been accepted by the mailing list yet.
I am ne to python GUi, I have built a cust frame by inheriting the Frame , the code is as follows :

    from Tkinter import *
    from logging import exception
    import tkFileDialog
    import  pickle
    import os.path
   
    STATION_NAME, TARGET_NAME, HOST_NAME, TARGET_IP, HOST_IP, EXCEL_FILE = range(6)
   
   
   
    class NAddStation(Frame):
        def __init__(self, parent=None):
            Frame.__init__(self, parent)
            self.pack(side=TOP, expand=YES, fill=BOTH)
            self.tempVar = []
            # Label Area
            self.labels = ["Station Name :", "Target Name  :", "Host Name    :", "Target's IP  :", "Host's IP    :",
                           "Excel File   :"]
            self.REMOVE =1
            self.ADD = 2
            self.UPDATE = 3
            # Entry Area
            self.Entry_Target_Name = None
            self.Entry_Host_Name = None
            self.Entry_Target_IP = None
            self.Entry_Host_IP = None
            self.Entry_Station_Name = None
            self.Entry_File_Path = None
   
            #Misc
            self.File_Browse_Button = None
            self.Add_Button = None
            self.Cancel_Button = None
            self.createWindow()
   
        def openFileBrowser(self):
            filepath = tkFileDialog.askopenfilename()
            self.Entry_File_Path.insert(0, filepath)
   
        def validate(self):
            print("Adding Data....")
   
            self.Store_Station()
   
        def Remove_Station(self,key):
   
            if  os.path.isfile('Station-pickle'):
                dbfile = open('Station-pickle', 'rb')
                db = pickle.load(dbfile)
                dbfile.close()
   
                db.__delitem__(key)
                dbfile = open('Station-pickle', 'wb')
                pickle.dump(db, dbfile)
                dbfile.close()
   
        def returnStationName(self):
            return self.tempVar[0].get()
   
   
   
        def Store_Station(self):
            fl={}
            rc={}
            fl['SN']= self.tempVar[0].get()
            fl['HN']= self.tempVar[1].get()
            fl['HP']= self.tempVar[2].get()
            fl['TN']= self.tempVar[3].get()
            fl['TP']= self.tempVar[4].get()
            fl['XL']= self.tempVar[5].get()
            station_name = self.tempVar[0].get()
            rc[station_name]= fl
            if not os.path.isfile('Station-pickle'):
                print ("Creating File")
                dbfile = open('Station-pickle', 'wb')               # use binary mode files in 3.X
                pickle.dump(rc, dbfile)                            # data is bytes, not str
            else:
                print ("Appending File")
                # --------
                dbfile = open('Station-pickle', 'rb')
                db = pickle.load(dbfile)
                dbfile.close()
                db[station_name] = fl
                dbfile = open('Station-pickle', 'wb')
                pickle.dump(db, dbfile)
                dbfile.close()
   
   
            dbfile.close()
   
        def Load_Station(self, key_value):
            dbfile = open('Station-pickle', 'rb')               # use binary mode files in 3.X
            db = pickle.load(dbfile)
            for key in db:
                if key == key_value:
                    print("STATION_NAME  :" +  db[key]['SN'])
                    print("HOST_NAME     :" +  db[key]['HN'])
                    print("HOST_IP       :" +  db[key]['HP'])
                    print("TARGET_NAME   :" +  db[key]['TN'])
                    print("TARGENT_IP    :" +  db[key]['TP'])
                    print("FILE_NAME     :" +  db[key]['XL'])
                    return ("STATION_NAME  :" +  db[key]['SN'] +"\n" + "HOST_NAME     :" +  db[key]['HN'] + "\n" + "HOST_IP       :" +  db[key]['HP'] + "\n" + "TARGET_NAME   :" +  db[key]['TN'] + "\n" + "TARGENT_IP    :" +  db[key]['TP'] + "\n" + "FILE_NAME     :" +  db[key]['XL'])
            print "No Station with Name " + key_value
   
            dbfile.close()
   
   
   
   
   
        def createWindow(self):
            # Station Entry
            Label(self, text=self.labels[STATION_NAME]).grid(row=0, column=0)
            self.Entry_Station_Name = Entry(self, width=20)
            self.tempVar.append(self.Entry_Station_Name)
            self.Entry_Station_Name.grid(row=0, column=1)
            # Host Entry
            Label(self, text=self.labels[HOST_NAME]).grid(row=1, column=0)
            self.Entry_Host_Name = Entry(self, width=20)
            self.tempVar.append(self.Entry_Host_Name)
            self.Entry_Host_Name.grid(row=1, column=1)
            Label(self, text=self.labels[HOST_IP]).grid(row=1, column=2)
            self.Entry_Host_IP = Entry(self, width=20)
            self.tempVar.append(self.Entry_Host_IP)
            self.Entry_Host_IP.grid(row=1, column=3)
   
            # Target Entry
            Label(self, text=self.labels[TARGET_NAME]).grid(row=2, column=0)
            self.Entry_Target_Name = Entry(self, width=20)
            self.tempVar.append(self.Entry_Target_Name)
            self.Entry_Target_Name.grid(row=2, column=1)
   
            Label(self, text=self.labels[TARGET_IP]).grid(row=2, column=2)
            self.Entry_Target_IP = Entry(self, width=20)
            self.tempVar.append(self.Entry_Target_IP)
            self.Entry_Target_IP.grid(row=2, column=3)
            #Browser Button
            Label(self, text=self.labels[EXCEL_FILE]).grid(row=3, column=0)
            self.Entry_File_Path = Entry(self, width=50)
            self.tempVar.append(self.Entry_File_Path)
            self.Entry_File_Path.grid(row=3, column=1)
            self.File_Browse_Button = Button(self, text="Browse", command=self.openFileBrowser, width=10,justify=CENTER).grid(row=3, column=3)
            Button(self, text="Add", command=(lambda : self.validate()), width=10,justify=CENTER).grid(row=4, column=1)
            Button(self, text="Cancel", command= self.winfo_toplevel().destroy, width=10,justify=CENTER).grid(row=4, column=2)
            self.Entry_Station_Name.focus()

**Now I want to use the above mentioned Custom Frame in Main app , when i ckick on AddStation  from menu file the custome Frame pops up , I can add the data but when i click on ok , i want the data to apear on the textArea , represented by Self.Entity2 in the following code:**

    from Tkconstants import LEFT, BOTTOM, X, TOP, RIGHT, ACTIVE, Y
    from Tkinter import Tk, Frame, Menu, END, Label, YES, BOTH, Entry, StringVar, Toplevel
    import Tkinter
    import sys
    from  make_db_pickle import *
   
    class SimpleApp(Frame):
        def __init__(self, parent):
            Frame.__init__(self, parent)
            self.parent = parent
            self.pack(expand=YES, fill=BOTH)
            self.master.title('GUI')
            self.initialize(parent)
            self.TargetName = None
            self.HostName = None
            self.eHostNameEntry =None
            self.sbar = None
            self.AddWidget = None
   
        def CancelButtonPressed(self, widget):
            # print "Cancel Button Pressed"
            widget.destroy()
   
        def AddEntryToListBox(self,entry):
   
            self.entry1.insert(END, entry)
   
        def enter(event,entry,widget):
            event.OkButtonPressed(entry,widget)
   
   
   
   
        def OkButtonPressed(self,entry,widget):
            print "Ok bution pressed"
            self.AddEntryToListBox(str(entry.get()).upper())
            widget.destroy()
   
        def runCommand(self, selection):                       # redefine me lower
            self.entry2.insert('1.0',"The following Station was selected " + selection)
            self.entry3.insert('1.0',"The following Station was selected " + selection)
            self.entry4.insert('1.0',"The following Station was selected " + selection)
   
   
            print('You selected:', selection)
   
        def handleList(self, event):
            index = self.entry1.curselection()                # on list double-click
            label = self.entry1.get(index)                    # fetch selection text
            self.runCommand(label)                             # and call action here
   
        def initialize(self, parent):
            menubar = Menu(self.parent)
            self.parent.config(menu=menubar)
            self.sbar = Tkinter.Scrollbar(self)
            fileMenu = Menu(menubar, tearoff = False)
            fileMenu.add_command(label="Add Station", command=self.AddNewStation)
            fileMenu.add_command(label="Delete Station", command=self.onExit)
            fileMenu.add_separator()
            fileMenu.add_command(label="Exit", command=self.onExit)
            menubar.add_cascade(label="File", menu=fileMenu)
   
            self.grid()
            self.entry1 = Tkinter.Listbox(self, height=24, yscrollcommand=1, bg="white")
            # --------------------------
            self.sbar = Tkinter.Scrollbar(self)
   
            self.sbar.config(command=self.entry1.yview)                    # xlink sbar and list
            self.entry1.config(yscrollcommand=self.sbar.set)               # move one moves other
   
            self.entry1.pack(side=LEFT, expand=YES, fill=BOTH)        # list clipped first
            # pos = 0
            #list.config(selectmode=SINGLE, setgrid=1)          # select,resize modes
            self.entry1.bind('<Double-1>', self.handleList)           # set event handler
   
            # --------------------------
   
   
            # for i in acts:
            #     self.entry1.insert(END, i)
   
            # self.entry1 = Tkinter.Text(self)
            self.entry1.grid(column=0, row=0, sticky='EW')
   
            self.entry2 = Tkinter.Text(self)
            self.entry2.grid(column=1, row=0, sticky='EW', padx=1, pady=1)
   
            self.entry3 = Tkinter.Text(self)
            self.entry3.grid(column=0, row=1, sticky='EW', padx=1, pady=1)
   
            self.entry4 = Tkinter.Text(self)
            self.entry4.grid(column=1, row=1, sticky='EW', padx=1, pady=1)
   
   
        def onExit(self):
            sys.exit()
        def AddNewStation(self):
            n = Toplevel(root)
            n.title("Add Station")
            self.AddWidget = NAddStation(n)
            n.transient()
   
        def AddStation(self):
            AddStationDialogBox = Toplevel(root)  #Tkinter.Tk()
   
   
            AddStationDialogBox.title('Add Station')
   
   
            frame = Frame(AddStationDialogBox) #frame for target entry
            frame.pack(padx=10, pady=10,side=TOP,fill=X)
   
            bottomframe = Frame(AddStationDialogBox) #froame for host entry
            bottomframe.pack(padx=10, pady=10,side=TOP,fill=X)
   
            bottomframe2 = Frame(AddStationDialogBox) #frame for button
            bottomframe2.pack(side=TOP)
            AddStationDialogBox.transient()
   
            lTargentName = Label(frame, text="Target Name :")
            lTargentName.pack(side=LEFT)
            TargetName = StringVar()
            eTargetEntryField = Entry(frame,width=20)
            eTargetEntryField.pack(side=RIGHT,fill=X)
            eTargetEntryField.focus()
   
            lHostName = Label(bottomframe, text="Host Name  :")
            lHostName.pack(side=LEFT)
            HostName = StringVar()
            eHostNameEntry = Entry(bottomframe,width=20)
            eHostNameEntry.pack(side=RIGHT,fill=X)
            okbutton = Tkinter.Button(bottomframe2, text="OK",command=(lambda : self.OkButtonPressed(eTargetEntryField, AddStationDialogBox)))
            okbutton.pack(side=LEFT, padx=10, pady=15)
   
   
            cancelbutton = Tkinter.Button(bottomframe2, text="CANCEL", command=(lambda : self.CancelButtonPressed(AddStationDialogBox)))
            cancelbutton.pack(side=LEFT, padx=10, pady=15)
   
            AddStationDialogBox.focus()
            AddStationDialogBox.bind('<Return>',(lambda  event : self.enter(eTargetEntryField,AddStationDialogBox)))
            AddStationDialogBox.mainloop()
   
   
    if __name__ == "__main__":
        root = Tk()
        app = SimpleApp(root)
   
        app.mainloop()