昨天我遇到了一个组合框选择问题,可以在以下链接中看到:
from combobox selection different result in multiple labels using tkinter,python
不幸的是我无法表达我的想法,所以,无论如何,我的问题无法解决,谢谢你的帮助。我真正的意思是由以下代码表示,问题是这个是使用列表框而不是组合框。你能帮我解决这个问题吗?
提前致谢。
埃克托
以下是代码:
from Tkinter import *
root = Tk()
root.minsize(500,300)
root.maxsize(550,310)
class MyListbox:
def __init__(self, parent, title):
self.parent = parent
self.parent.title(title)
self.parent.protocol("WM_DELETE_WINDOW", self.Closes)
self.myData= (
["1", "Jhon Doe", "Madrid", "0341-672541", "6 SD"],
["2", "Mike Grant", "Barcelona", "0341-435271", "6 SD"],
["3", "Steven Mc Fly", "Rome", "0341-123456", "6 SD"],
["4", "Joao Pontes", "Rio", "0341-234567", "6 SD"],
["5", "Kenji S.", "Tokyo", "0341-213212", "6 SD"])
self.stablishment()
self.SeT()
self.Listbox_Content()
self.Data_Content()
self.listboxData.focus_set()
def SeT(self):
self.listboxData.bind('<ButtonRelease-1>', self.click)
self.listboxData.bind('<KeyRelease>', self.click)
def click(self, event=None):
self.Data_Content()
def Data_Content(self):
index = self.listboxData.curselection()
code = int(index[0])
self.entNumber.delete(0, END)
self.entName.delete(0, END)
self.entCity.delete(0, END)
self.entTel.delete(0, END)
self.entAddress.delete(0, END)
self.entNumber.insert(END, self.myData[code][0])
self.entName.insert(END, self.myData[code][1])
self.entCity.insert(END, self.myData[code][2])
self.entTel.insert(END, self.myData[code][3])
self.entAddress.insert(END, self.myData[code][4])
def Listbox_Content(self):
for dat in range(len(self.myData)):
self.listboxData.insert(END, self.myData[dat][1])
self.listboxData.selection_set(0)
def stablishment(self):
mainFrame = Frame(self.parent)
mainFrame.pack(fill=BOTH, expand=YES)
self.statusBar = Label(mainFrame, text="App",relief=SUNKEN, bd=1)
self.statusBar.pack(side=BOTTOM, fill=X)
fr_left = Frame(mainFrame, bd=10)
fr_left.pack(fill=BOTH, expand=YES, side=LEFT)
scroll = Scrollbar(fr_left, orient=VERTICAL)
self.listboxData = Listbox(fr_left, width=30,yscrollcommand=scroll.set)
self.listboxData.pack(fill=Y, side=LEFT)
scroll.configure(command=self.listboxData.yview)
scroll.pack(side=LEFT, fill=Y)
fr_right = Frame(mainFrame, bd=10)
fr_right.pack(fill=BOTH, expand=YES, side=RIGHT)
fr_up = Frame(fr_right)
fr_up.pack(side=TOP, expand=YES)
Label(fr_up, text='List Number').grid(row=0, column=0, sticky=W)
self.entNumber = Entry(fr_up)
self.entNumber.grid(row=0, column=1)
Label(fr_up, text='Name').grid(row=1, column=0, sticky=W)
self.entName = Entry(fr_up)
self.entName.grid(row=1, column=1)
Label(fr_up, text='City').grid(row=2, column=0, sticky=W)
self.entCity = Entry(fr_up)
self.entCity.grid(row=2, column=1)
Label(fr_up, text='No. Tel').grid(row=3, column=0, sticky=W)
self.entTel = Entry(fr_up)
self.entTel.grid(row=3, column=1)
Label(fr_up, text='Address').grid(row=4, column=0, sticky=W)
self.entAddress = Entry(fr_up)
self.entAddress.grid(row=4, column=1)
def Closes(self, event=None):
self.parent.destroy()
if __name__ == '__main__':
app = MyListbox(root, "Main Window")
root.mainloop()
答案 0 :(得分:3)
以下是A. Rodas answer中与您之前的问题相关的代码(或多或少)适用于您使用此问题发布的代码中表达的想法:
from Tkinter import *
import ttk
root = Tk()
root.minsize(500,300)
root.maxsize(550,310)
class MyListbox:
def __init__(self, parent, title):
self.parent = parent
self.parent.title(title)
self.parent.protocol("WM_DELETE_WINDOW", self.closes)
self.myData= (
["1", "Jhon Doe", "Madrid", "0341-672541", "6 SD"],
["2", "Mike Grant", "Barcelona", "0341-435271", "7 SD"],
["3", "Steven Mc Fly", "Rome", "0341-123456", "8 SD"],
["4", "Joao Pontes", "Rio", "0341-234567", "9 SD"],
["5", "Kenji S.", "Tokyo", "0341-213212", "10 SD"])
self.establishment()
def combobox_handler(self, event):
current = self.combobox.current()
self.entNumber.delete(0, END)
self.entName.delete(0, END)
self.entCity.delete(0, END)
self.entTel.delete(0, END)
self.entAddress.delete(0, END)
self.entNumber.insert(END, self.myData[current][0])
self.entName.insert(END, self.myData[current][1])
self.entCity.insert(END, self.myData[current][2])
self.entTel.insert(END, self.myData[current][3])
self.entAddress.insert(END, self.myData[current][4])
def establishment(self):
mainFrame = Frame(self.parent)
mainFrame.pack(fill=BOTH, expand=YES)
self.statusBar = Label(mainFrame, text="App",relief=SUNKEN, bd=1)
self.statusBar.pack(side=BOTTOM, fill=X)
fr_left = Frame(mainFrame, bd=10)
fr_left.pack(fill=BOTH, expand=YES, side=LEFT)
names = [person[1] for person in self.myData]
self.combobox = ttk.Combobox(fr_left, values=names)
self.combobox.bind('<<ComboboxSelected>>', self.combobox_handler)
self.combobox.pack()
fr_right = Frame(mainFrame, bd=10)
fr_right.pack(fill=BOTH, expand=YES, side=RIGHT)
fr_up = Frame(fr_right)
fr_up.pack(side=TOP, expand=YES)
Label(fr_up, text='List Number').grid(row=0, column=0, sticky=W)
self.entNumber = Entry(fr_up)
self.entNumber.grid(row=0, column=1)
Label(fr_up, text='Name').grid(row=1, column=0, sticky=W)
self.entName = Entry(fr_up)
self.entName.grid(row=1, column=1)
Label(fr_up, text='City').grid(row=2, column=0, sticky=W)
self.entCity = Entry(fr_up)
self.entCity.grid(row=2, column=1)
Label(fr_up, text='No. Tel').grid(row=3, column=0, sticky=W)
self.entTel = Entry(fr_up)
self.entTel.grid(row=3, column=1)
Label(fr_up, text='Address').grid(row=4, column=0, sticky=W)
self.entAddress = Entry(fr_up)
self.entAddress.grid(row=4, column=1)
def closes(self, event=None):
self.parent.destroy()
if __name__ == '__main__':
app = MyListbox(root, "Main Window")
root.mainloop()