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
|  
Report Content as Inappropriate

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()




Loading...