Python 如何根据组合框选择更改多条目小部件?

Python 如何根据组合框选择更改多条目小部件?,python,combobox,tkinter,Python,Combobox,Tkinter,昨天我遇到了一个选择组合框的问题,可以在下面的链接中看到: 不幸的是,我无法表达我的想法,所以我的问题没有得到解决。无论如何,谢谢你的帮助。我真正的意思是用以下代码更好地表达,问题是它使用的是列表框,而不是组合框 代码如下: from Tkinter import * root = Tk() root.minsize(500,300) root.maxsize(550,310) class MyListbox: def __init__(self, parent, title):

昨天我遇到了一个选择组合框的问题,可以在下面的链接中看到:

不幸的是,我无法表达我的想法,所以我的问题没有得到解决。无论如何,谢谢你的帮助。我真正的意思是用以下代码更好地表达,问题是它使用的是
列表框
,而不是
组合框

代码如下:

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()
从Tkinter导入*
root=Tk()
root.minsize(500300)
root.maxsize(550310)
类别MyListbox:
定义初始(自我、父母、头衔):
self.parent=parent
self.parent.title(标题)
self.parent.protocol(“WM\u DELETE\u窗口”,self.Closes)
self.myData=(
[“1”、“Jhon Doe”、“马德里”、“0341-672541”、“6 SD”],
[“2”、“Mike Grant”、“巴塞罗那”、“0341-435271”、“6 SD”],
[“3”、“Steven Mc Fly”、“罗马”、“0341-123456”、“6 SD”],
[“4”、“Joao Pontes”、“Rio”、“0341-234567”、“6 SD”],
[“5”、“Kenji S.”、“东京”、“0341-213121”、“6 SD”])
自我建立
self.SeT()
self.Listbox_Content()
self.Data_Content()
self.listboxData.focus\u set()
def设置(自):
self.listboxData.bind(“”,self.click)
self.listboxData.bind(“”,self.click)
def单击(自身,事件=无):
self.Data_Content()
def数据_内容(自身):
index=self.listboxData.curseelection()
代码=int(索引[0])
self.entNumber.delete(0,结束)
self.entName.delete(0,结束)
self.entCity.delete(0,结束)
self.entTel.delete(0,结束)
self.entAddress.delete(0,结束)
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列表框内容(自身):
对于范围内的dat(len(self.myData)):
self.listboxData.insert(END,self.myData[dat][1])
self.listboxData.selection\u集(0)
def建立(自我):
大型机=帧(self.parent)
mainFrame.pack(fill=BOTH,expand=YES)
self.statusBar=标签(大型机,text=“App”,浮雕=凹陷,bd=1)
self.statusBar.pack(侧面=底部,填充=X)
fr_左=帧(主机,bd=10)
fr_left.pack(填充=两者,展开=是,侧面=左侧)
滚动=滚动条(左前,方向=垂直)
self.listboxData=Listbox(fr_左,宽度=30,yscrollcommand=scroll.set)
self.listboxData.pack(fill=Y,side=LEFT)
scroll.configure(命令=self.listboxData.yview)
滚动包装(侧面=左侧,填充=Y)
fr_right=帧(主机,bd=10)
fr_right.pack(填充=两者,展开=是,侧面=右侧)
FRU向上=帧(FRU向右)
FRU up.pack(侧面=顶部,展开=是)
标签(fr_up,text='List Number').grid(行=0,列=0,粘性=W)
self.entNumber=条目(fr\u up)
self.entNumber.grid(行=0,列=1)
标签(fr_up,text='Name').grid(行=1,列=0,粘性=W)
self.entName=条目(fr\u up)
self.entName.grid(行=1,列=1)
标签(fr_up,text='City').grid(行=2,列=0,粘性=W)
self.entCity=Entry(fr\u up)
self.entCity.grid(行=2,列=1)
标签(fr_up,text='No.Tel').grid(行=3,列=0,粘性=W)
self.entTel=入口(FRU up)
self.entTel.grid(行=3,列=1)
标签(fr_up,text='Address').grid(行=4,列=0,粘性=W)
self.entAddress=条目(fr\u up)
self.entAddress.grid(行=4,列=1)
def关闭(自身,事件=无):
self.parent.destroy()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app=MyListbox(根,“主窗口”)
root.mainloop()

以下是A.Rodas中针对您先前问题的代码(或多或少)与您随此问题发布的代码中表达的想法相适应:

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()
从Tkinter导入*
导入ttk
root=Tk()
root.minsize(500300)
root.maxsize(550310)
类别MyListbox:
定义初始(自我、父母、头衔):
self.parent=parent
self.parent.title(标题)
self.parent.protocol(“WM\u DELETE\u窗口”,self.closes)
self.myData=(
[“1”、“Jhon Doe”、“马德里”、“0341-672541”、“6 SD”],
[“2”、“Mike Grant”、“巴塞罗那”、“0341-435271”、“7 SD”],
[“3”、“Steven Mc Fly”、“罗马”、“0341-123456”、“8 SD”],
[“4”、“Joao Pontes”、“Rio”、“0341-234567”、“9 SD”],
[“5”、“Kenji S.”、“东京”、“0341-213121”、“10 SD”])
自我建立()
def组合框_处理程序(自身、事件):
current=self.combobox.current()
self.entNumber.delete(0,结束)
self.entName.delete(0,结束)
self.entCity.delete(0,结束)
self.entTel.delete(0,结束)
self.entAddress.delete(0,结束)
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建立(自我):
大型机=帧(self.parent)
mainFrame.pack(fill=BOTH,expand=YES)
self.statusBar=标签(大型机,text=“App”,浮雕=凹陷,bd=1)
self.statusBar.pack(侧面=底部,填充=X)
fr_左=帧(主机,bd=10)
fr_left.pack(填充=两者,展开=是,侧面=左侧)
name=[person[1]表示self.myData中的person]
self.combobox=ttk.combobox(左前,值=名称)
self.combobox.bind(“”,self.combobox\u处理程序)
self.combobox.pack()
fr_right=帧(主机,bd=10)
fr_right.pack(填充=两者,展开=是,侧面=右侧)
FRU向上=帧(FRU向右)
FRU up.pack(侧面=顶部,展开=是)
标签(fr_up,text='List Number').grid(行=0,列=0,粘性=W)