Re: Press button to load data
On Friday 17 November 2006 02:58, you wrote: On Fri, 17 Nov 2006 00:25:39 -0500, jim-on-linux [EMAIL PROTECTED] declaimed the following in comp.lang.python: Without being able to run the code my question is where is the id in the lambda defined? Please take into account that I've not actually used lambdas, so might have some mistakes in the syntax... for bill in shelvename: global funcs bill1 = Button(None, text= shelvename[bill].name, font=('bold',10),command=(lambda x = id: fetchRecord(x))) id would be something that identifies the button... In this case, maybe you can use bill: Think about relating a Tkinter variable to each button then the button is related to a unique variable. ( Tkinter StingVar or IntVar or some others.) Then you will have to keep the variables in a list or dictionary for recalling. jim-on-linux http://www.inqvista.com ... command=(lambda x = bill: fetchRecord(x)) ... As I understand the lambda syntax, what this does is create a function (which is the command that gets run when the button is pushed), and this function will call fetchRecord passing it the value that x had at the time of definition (hence the x=...) -- WulfraedDennis Lee Bieber KD6MOG [EMAIL PROTECTED] [EMAIL PROTECTED] HTTP://wlfraed.home.netcom.com/ (Bestiaria Support Staff:[EMAIL PROTECTED]) HTTP://www.bestiaria.com/ -- http://mail.python.org/mailman/listinfo/python-list
Re: Press button to load data
Without being able to run the code my question is where is the id in the lambda defined? On Thursday 16 November 2006 22:31, jim wrote: Thanks for your help, but now I have a another problem so here is my code again when I run this it prints built-in function id from Tkinter import * import shelve from tkMessageBox import showerror shelvename = shelve.open('class-shelve2') cat = (' Name ', ' Account # ', ' Amount Due ', ' Date Due ') def NameFields(top): name1 = Label(None, text=cat[0], relief=RIDGE, width=20, fg='blue', bg='white', font=('bold',15)) name2 = Label(None, text=cat[1], relief=RIDGE, width=15, fg='blue', bg='white', font=('bold',15)) name3 = Label(None, text=cat[2], relief=RIDGE, width=15, fg='blue', bg='white', font=('bold',15)) name4 = Label(None, text=cat[3], relief=RIDGE, width=15, fg='blue', bg='white', font=('bold',15)) name1.grid(row=0, column=0, sticky=NSEW) name2.grid(row=0, column=1, sticky=NSEW) name3.grid(row=0, column=2, sticky=NSEW) name4.grid(row=0, column=3, sticky=NSEW) top.columnconfigure(0, weight=1) top.columnconfigure(1, weight=1) top.columnconfigure(2, weight=1) top.columnconfigure(3, weight=1) def DisplayBills(top): c=0 x = [] global bill for bill in shelvename: global funcs bill1 = Button(None, text= shelvename[bill].name, font=('bold',10),command=(lambda x = id: fetchRecord(x))) bill2 = Label(None, text= shelvename[bill].account, relief=RIDGE, font=('bold',10)) bill3 = Label(None, text= shelvename[bill].paymentDue, relief=RIDGE, font=('bold',10), fg='red') bill4 = Label(None, text= shelvename[bill].dateDue, relief=RIDGE, font=('bold',10)) bill1.grid(row=c, column=0, sticky=NSEW) bill2.grid(row=c,column=1, sticky=NSEW) bill3.grid(row=c,column=2, sticky=NSEW) bill4.grid(row=c,column=3, sticky=NSEW) c = c + 1 return bill def fetchRecord(x): print x top = Tk() DisplayBills(top), NameFields(top) mainloop() jim-on-linux wrote: Just from a glance my thoughts are to start with one file and build on it. Make a class of it so you can loop it to use it over for each record. You wrote that the info was in a file on the hd. If it is in a file on the hd, use the open() function, read from the file, only one record and write the data to a list. You can incorporate the button option, command = CallSomeFunction, to call a function that builds a window, and loads the data into labels or entry boxes. If you are going to modify the data, entry boxes allow you to modify it and save it back to a file. Also, when using the open() function, close it after you get the data you need. otherwise you may experience unexpected problems. client = open('client', 'r') client.read() (readline()) (readlines()) client.close() jim-on-linux http//:www.inqvista.com -- http://mail.python.org/mailman/listinfo/python-list
Press button to load data
I'm new to Python, and programming in general. What I'm trying to do here is to load a list of accounts from a file on my harddrive into a string of Buttons in Tkinter, and when I press one of the Buttons, which has one of my account name, it will load that account into a new window. But I don't understand how to code the proccess that would tell the program what account is selected. Any help with this would be very appreciated. Thanks in advance. from Tkinter import * import shelve from tkMessageBox import showerror shelvename = shelve.open('class-shelve2') cat = (' Name ', ' Account # ', ' Amount Due ', ' Date Due ') def NameFields(top): name1 = Label(None, text=cat[0], relief=RIDGE, width=20, fg='blue', bg='white', font=('bold',15)) name2 = Label(None, text=cat[1], relief=RIDGE, width=15, fg='blue', bg='white', font=('bold',15)) name3 = Label(None, text=cat[2], relief=RIDGE, width=15, fg='blue', bg='white', font=('bold',15)) name4 = Label(None, text=cat[3], relief=RIDGE, width=15, fg='blue', bg='white', font=('bold',15)) name1.grid(row=0, column=0, sticky=NSEW) name2.grid(row=0, column=1, sticky=NSEW) name3.grid(row=0, column=2, sticky=NSEW) name4.grid(row=0, column=3, sticky=NSEW) top.columnconfigure(0, weight=1) top.columnconfigure(1, weight=1) top.columnconfigure(2, weight=1) top.columnconfigure(3, weight=1) def DisplayBills(top): c=0 for bill in shelvename: bill1 = Button(None, text= shelvename[bill].name, font=('bold',10), command=fetchRecord) bill2 = Label(None, text= shelvename[bill].account, relief=RIDGE, font=('bold',10)) bill3 = Label(None, text= shelvename[bill].paymentDue, relief=RIDGE, font=('bold',10), fg='red') bill4 = Label(None, text= shelvename[bill].dateDue, relief=RIDGE, font=('bold',10)) bill1.grid(row=c, column=0, sticky=NSEW) bill2.grid(row=c,column=1, sticky=NSEW) bill3.grid(row=c,column=2, sticky=NSEW) bill4.grid(row=c,column=3, sticky=NSEW) c = c + 1 def fetchRecord(): top = Tk() DisplayBills(top), NameFields(top) mainloop() -- http://mail.python.org/mailman/listinfo/python-list
Re: Press button to load data
Just from a glance my thoughts are to start with one file and build on it. Make a class of it so you can loop it to use it over for each record. You wrote that the info was in a file on the hd. If it is in a file on the hd, use the open() function, read from the file, only one record and write the data to a list. You can incorporate the button option, command = CallSomeFunction, to call a function that builds a window, and loads the data into labels or entry boxes. If you are going to modify the data, entry boxes allow you to modify it and save it back to a file. Also, when using the open() function, close it after you get the data you need. otherwise you may experience unexpected problems. client = open('client', 'r') client.read() (readline()) (readlines()) client.close() jim-on-linux http//:www.inqvista.com On Wednesday 15 November 2006 23:20, [EMAIL PROTECTED] wrote: I'm new to Python, and programming in general. What I'm trying to do here is to load a list of accounts from a file on my harddrive into a string of Buttons in Tkinter, and when I press one of the Buttons, which has one of my account name, it will load that account into a new window. But I don't understand how to code the proccess that would tell the program what account is selected. Any help with this would be very appreciated. Thanks in advance. from Tkinter import * import shelve from tkMessageBox import showerror shelvename = shelve.open('class-shelve2') cat = (' Name ', ' Account # ', ' Amount Due ', ' Date Due ') def NameFields(top): name1 = Label(None, text=cat[0], relief=RIDGE, width=20, fg='blue', bg='white', font=('bold',15)) name2 = Label(None, text=cat[1], relief=RIDGE, width=15, fg='blue', bg='white', font=('bold',15)) name3 = Label(None, text=cat[2], relief=RIDGE, width=15, fg='blue', bg='white', font=('bold',15)) name4 = Label(None, text=cat[3], relief=RIDGE, width=15, fg='blue', bg='white', font=('bold',15)) name1.grid(row=0, column=0, sticky=NSEW) name2.grid(row=0, column=1, sticky=NSEW) name3.grid(row=0, column=2, sticky=NSEW) name4.grid(row=0, column=3, sticky=NSEW) top.columnconfigure(0, weight=1) top.columnconfigure(1, weight=1) top.columnconfigure(2, weight=1) top.columnconfigure(3, weight=1) def DisplayBills(top): c=0 for bill in shelvename: bill1 = Button(None, text= shelvename[bill].name, font=('bold',10), command=fetchRecord) bill2 = Label(None, text= shelvename[bill].account, relief=RIDGE, font=('bold',10)) bill3 = Label(None, text= shelvename[bill].paymentDue, relief=RIDGE, font=('bold',10), fg='red') bill4 = Label(None, text= shelvename[bill].dateDue, relief=RIDGE, font=('bold',10)) bill1.grid(row=c, column=0, sticky=NSEW) bill2.grid(row=c,column=1, sticky=NSEW) bill3.grid(row=c,column=2, sticky=NSEW) bill4.grid(row=c,column=3, sticky=NSEW) c = c + 1 def fetchRecord(): top = Tk() DisplayBills(top), NameFields(top) mainloop() -- http://mail.python.org/mailman/listinfo/python-list