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