python - Set Tkinter label texts as elements of list -
i building gui takes query
user , runs lefunction.afunction(query)
return list called result
. when user presses enter, want text on each label set element of result
. attempt, shown below, prints out last element of result
on last label...(bear me, beginner tkinter.)
thank you.
import tkinter import os import lefunction class simpleapp_tk(tkinter.tk): def __init__(self,parent): tkinter.tk.__init__(self,parent) self.parent = parent self.initialize() def initialize(self): self.grid() self.entryvariable = tkinter.stringvar() self.entry = tkinter.entry(self,textvariable=self.entryvariable) self.entry.grid(column=0,row=0,sticky='ew') self.entry.bind("<return>", self.onpressenter) self.entryvariable.set(u"") j in range (1,10): self.labelvariable = tkinter.stringvar() label = tkinter.label(self,textvariable=self.labelvariable, anchor="w",fg="black",bg="white") label.bind("<1>", lambda event, text="text": \ self.click_link(event, text)) label.grid(column=0,row=j,columnspan=2,sticky='ew') self.labelvariable.set(j) self.grid_columnconfigure(0,weight=1) self.resizable(true,false) self.update() self.geometry(self.geometry()) self.entry.focus_set() self.entry.selection_range(0, tkinter.end) def onpressenter(self,event): #result list result = lefunction.afunction(self.entryvariable.get()) in range (0,len(result)): print "result",i,":",result[i] self.labelvariable.set(result[i]) self.entry.focus_set() self.entry.selection_range(0, tkinter.end) def click_link(self, event, text): print "you clicked '%s'" % text #os.system("open "+file) if __name__ == "__main__": app = simpleapp_tk(none) app.title('my application') app.mainloop()
the following code works (provided afunction
code works expected):
import tkinter import os import lefunction class simpleapp_tk(tkinter.tk): def __init__(self,parent): tkinter.tk.__init__(self,parent) self.parent = parent self.initialize() def initialize(self): self.grid() self.entryvariable = tkinter.stringvar() self.entry = tkinter.entry(self,textvariable=self.entryvariable) self.entry.grid(column=0,row=0,sticky='ew') self.entry.bind("<return>", self.onpressenter) self.entryvariable.set(u"") self.labelvars = [] j in range (1,10): labelvar = tkinter.stringvar() labelvar.set(j) self.labelvars.append(labelvar) label = tkinter.label(self,textvariable=labelvar, anchor="w",fg="black",bg="white") label.bind("<1>", lambda event, text="sup": \ self.click_link(event, text)) label.grid(column=0,row=j,columnspan=2,sticky='ew') self.grid_columnconfigure(0,weight=1) self.resizable(true,false) self.update() self.geometry(self.geometry()) self.entry.focus_set() self.entry.selection_range(0, tkinter.end) def onpressenter(self,event): #result list result = lefunction.afunction(self.entryvariable.get()) in range (0,len(result)): print "result",i,":",result[i] self.labelvars[i].set(result[i]) self.entry.focus_set() self.entry.selection_range(0, tkinter.end) def click_link(self, event, text): print "you clicked '%s'" % text #os.system("open "+file) if __name__ == "__main__": app = simpleapp_tk(none) app.title('my application') app.mainloop()
instead of setting self.labelvariable
on , over, create self.labelvars
list, each element corresponding labelvar
. can set text of elements of list with:
self.labelvars[i].set(result[i])
Comments
Post a Comment