Chris Roy-Smith wrote: > OS: Linux Chris-X451MA 4.4.0-97-generic #120-Ubuntu SMP Tue Sep 19 > 17:28:18 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux > > Python 3.5.2 (default, Sep 14 2017, 22:51:06) > > I am trying to learn how to use a tkinter listbox. When I execute my > experimental code, an odd index is printed immediately (output below > code), index looks wrong (shouldn’t it be an integer). Also it doesn't > print new values when I select an entry. > > --------------------------------------------------- > > #!/usr/bin/python3 > #test listbox > from tkinter import * > > class Dialog(Frame): > > def __init__(self, master): > Frame.__init__(self, master) > self.list = Listbox(self, selectmode=EXTENDED) > self.list.pack(fill=BOTH, expand=1) > self.current = None > self.poll() # start polling the list > > def poll(self): > now = self.list.curselection() > if now != self.current: > self.list_has_changed(now) > self.current = now > self.after(250, self.poll) > > def list_has_changed(self, selection): > print ("selection is", selection) > > > snames=('fred', 'george', 'manuel', 'john', 'eric', 'terry') > master = Tk() > > listbox = Listbox(master) > listbox.grid(row=0) > > for item in snames: > listbox.insert(END, item)
The problem is your inconsistent use of the Dialog class which you do not instantiate. > myindicator=Dialog.list_has_changed(master, listbox) Here you call list_has_changed() like a function. The first argument (self) is your `master` object, the second is the listbox. In a nutshell you are doing >>> from tkinter import * >>> master = Tk() >>> listbox = Listbox(master) >>> print(listbox) .140206885684560 and what is displayed when you are printing a tkinter widget is its Tcl/Tk name -- which admittedly looks odd. > mainloop() A fix with minimal changes might be #!/usr/bin/python3 #test listbox from tkinter import * class Dialog(Frame): def __init__(self, master): Frame.__init__(self, master) self.list = Listbox(self, selectmode=EXTENDED) self.list.pack(fill=BOTH, expand=1) self.current = None self.poll() # start polling the list def poll(self): now = self.list.curselection() if now != self.current: self.list_has_changed(now) self.current = now self.after(250, self.poll) def list_has_changed(self, selection): print ("selection is", selection) snames=('fred', 'george', 'manuel', 'john', 'eric', 'terry') master = Tk() dialog = Dialog(master) dialog.pack() for item in snames: dialog.list.insert(END, item) mainloop() _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor