Python 如何选择列表框,并根据该选择创建第二个列表框?
所以我仍然在学习tkinter。我有三个列表框,第一个有一定数量的选项。当用户选择一个选项时,第二个列表框需要根据之前的选择进行填充。这是我试过的代码。我正在使用python 2.7 更新:Python 如何选择列表框,并根据该选择创建第二个列表框?,python,python-2.7,python-3.x,tkinter,tk,Python,Python 2.7,Python 3.x,Tkinter,Tk,所以我仍然在学习tkinter。我有三个列表框,第一个有一定数量的选项。当用户选择一个选项时,第二个列表框需要根据之前的选择进行填充。这是我试过的代码。我正在使用python 2.7 更新: import sys import Tkinter as TK font = ('Times New Rome', 12, 'Bold') Template = '' Entrybox1 = '' Entrybox2 = '' Lb1 = '' Lb2 = '' Lb3 = '' class smart
import sys
import Tkinter as TK
font = ('Times New Rome', 12, 'Bold')
Template = ''
Entrybox1 = ''
Entrybox2 = ''
Lb1 = ''
Lb2 = ''
Lb3 = ''
class smartstopkiosk_tk(TK.Tk):
def __init__(self, parent):
TK.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
#self.parent.title("Smartstop Kiosk")
global Entrybox1
global Entrybox2
global LocalTemplate
global Software
seltext = ""
software = ('Microsoft', 'Abode', 'SAP', 'Lotus Notes', 'Jive','Cisco', 'Chrome')
hardware = ("Computer", "Charger", " USB Headset", "Keyboard", "Mouse", "Webcam")
microsoft = ("Outlook", "Lync", "Word", "Excel", "PowerPoint", "Visio", "Project", "Publisher")
adobe = ("Adobe Reader", "Java", "Flash", "Adobe Pro")
cisco = ('IP Communicator', '')
wireless = ("MYLOW", "Corporate", "Visitor", "MYLTW")
printers = ("2N", "2S", "3N", "3S", "4N", "4S", "5N", "5S")
mobile = ("Blackberry", "iPhone","iPad")
AD = ("Unlock", "Reset")
LocalTemplate = ('User Assistance with Software.', 'User Assistance with Hardware.', 'Mobile Device Support.',
'Software Installation Request', 'Hardware Request', 'Wireless Connection', 'Password Reset/Username Unlocked',
'Add Printer')
#creates font types
font = ('Times New Roman', 14, 'bold')
font2 = ('Times New Roman',12, 'bold')
#Creates Instructions for Users
stepOne = TK.LabelFrame(self, text=" 1. User Information: ", font = font2)
stepOne.grid(row=0, columnspan=7, sticky='w', padx=5, pady=5, ipadx=5, ipady=5)
stepTwo = TK.LabelFrame(self, text="2. Select Program or Hardware Problems", font = font2)
stepTwo.grid(row=3, columnspan=7, sticky='w', padx=5, pady=5, ipadx=5, ipady=5)
stepThree = TK.LabelFrame(self, text="Please Enter the Problem or Your Request:", font = font2)
stepThree.grid(row=6, columnspan=7, sticky='w', padx=5, pady=5, ipadx=5, ipady=5)
#Creates Label for Users
Label1 = TK.Label(stepOne, text = "First Name", font = font)
Label1.grid(column = 2, row = 0, sticky = 'w', padx = (10, 10))
Label2 = TK.Label(stepOne, text = "Last Name", font = font)
Label2.grid(column = 4, row = 0, sticky = 'w', padx = (10, 10))
Label3 = TK.Label(stepOne, text = "UserName", font = font)
Label3.grid(column = 6, row = 0, sticky = 'w', padx = (10, 10))
#Creates Entry Box for User input
self.entry = TK.Entry(stepOne, width = 30)
self.entry.grid(column = 2, row = 1,padx = (10, 10))
entry2 = TK.Entry(stepOne, width = 30)
entry2.grid(column = 4, row = 1,padx = (10, 10))
entry3 = TK.Entry(stepOne, width = 30)
entry3.grid(column = 6, row = 1, columnspan = 2, padx = (10, 10))
#Creates User Input Box
Usertext = TK.Text(stepThree, height = 10, width = 110, font = font)
Usertext.grid(column = 2, row = 15, padx = (10, 10))
#Creates List Boxes
Listbox1 = TK.Listbox(stepTwo, selectmode = 'SINGLE', height = 10, width = 35, font = font, exportselection = 0)
Listbox1.grid(column = 2, row = 1, padx = (10, 10))
for i in LocalTemplate:
Listbox1.insert(TK.END, i)
Listbox1.bind("<<ListboxSelect>>", self.selection)
Listbox2 = TK.Listbox(stepTwo, selectmode = 'SINGLE', height = 10, width = 35, font = font, exportselection = 0)
Listbox2.grid(column = 4, row = 1, padx = (10, 10))
for x in seltext:
Listbox2.insert(TK.END, x)
Listbox2.bind("<<ListboxSelect>>", self.selection)
Listbox3 = TK.Listbox(stepTwo, selectmode = 'SINGLE', height = 10, width = 35, font = font, exportselection = 0)
Listbox3.grid(column = 6, row = 1, padx = (10, 10))
#Creates Buttons
Submit = TK.Button(self, text = 'Submit', font = font2)
Submit.grid(column = 3, row = 10, sticky = 'we', padx = (10, 10))
Startover = TK.Button(self, text = 'Cancel', font = font2)
Startover.grid(column = 4, row = 10, sticky = 'we', padx = (10, 10))
def selection(self, val):
sender = val.Listbox1
index = listbox1.curselection()
value = Listbox1.get(index[0])
if index == 1 or index == 4:
seltext = software
elif index == 2 or index == 5:
seltext = hardware
elif index == 3:
seltext = mobile
elif index == 6:
seltext = wireless
elif index == 7:
seltext = AD
elif index == 8:
seltext = printer
def main():
app = smartstopkiosk_tk(None)
app.geometry("1300x768")
app.mainloop()
if __name__ == "__main__":
main()
导入系统
将Tkinter作为TK导入
font=('Times New Rome',12,'Bold')
模板=“”
Entrybox1=''
Entrybox2=''
Lb1=“”
Lb2=“”
Lb3=“”
类smartstopkiosk_tk(tk.tk):
定义初始化(自身,父级):
TK.TK.\uuuuu初始化(self,parent)
self.parent=parent
self.initialize()
def初始化(自):
self.grid()
#self.parent.title(“Smartstop Kiosk”)
全局入口框1
全局入口框2
全局本地模板
全球软件
seltext=“”
软件=('Microsoft','Abode','SAP','Lotus Notes','Jive','Cisco','Chrome')
硬件=(“计算机”、“充电器”、“USB耳机”、“键盘”、“鼠标”、“网络摄像头”)
microsoft=(“Outlook”、“Lync”、“Word”、“Excel”、“PowerPoint”、“Visio”、“Project”、“Publisher”)
adobe=(“AdobeReader”、“Java”、“Flash”、“AdobePro”)
cisco=(“IP通信器”,“”)
无线=(“MYLOW”、“公司”、“访客”、“MYLTW”)
打印机=(“2N”、“2S”、“3N”、“3S”、“4N”、“4S”、“5N”、“5S”)
手机=(“黑莓”、“iPhone”、“iPad”)
AD=(“解锁”、“重置”)
LocalTemplate=(“软件用户协助”。“硬件用户协助”。,“移动设备支持”,
“软件安装请求”、“硬件请求”、“无线连接”、“密码重置/用户名解锁”,
“添加打印机”)
#创建字体类型
字体=('Times New Roman',14,'bold')
font2=(“新罗马时代”,12,“粗体”)
#为用户创建指令
stepOne=TK.LabelFrame(self,text=“1.用户信息:”,font=font2)
stepOne.grid(行=0,列span=7,粘滞=w',padx=5,pady=5,ipadx=5,ipady=5)
Step2=TK.LabelFrame(self,text=“2.选择程序或硬件问题”,font=font2)
步骤二.网格(行=3,列span=7,粘滞=w',padx=5,pady=5,ipadx=5,ipady=5)
stepThree=TK.LabelFrame(self,text=“请输入问题或您的请求:”,font=font2)
第三步。网格(行=6,列span=7,粘滞=w',padx=5,pady=5,ipadx=5,ipady=5)
#为用户创建标签
Label1=TK.Label(第一步,text=“First Name”,font=font)
标签1.网格(列=2,行=0,粘性=w',padx=(10,10))
Label2=TK.Label(第一步,text=“Last Name”,font=font)
Label2.grid(列=4,行=0,粘性=w',padx=(10,10))
Label3=TK.Label(第一步,text=“UserName”,font=font)
标签3.网格(列=6,行=0,粘性=w',padx=(10,10))
#创建用户输入的输入框
self.entry=TK.entry(第一步,宽度=30)
self.entry.grid(列=2,行=1,padx=(10,10))
entry2=TK.Entry(第一步,宽度=30)
entry2.grid(列=4,行=1,padx=(10,10))
entry3=TK.Entry(第一步,宽度=30)
entry3.grid(列=6,行=1,列span=2,padx=(10,10))
#创建用户输入框
Usertext=TK.Text(第三步,高度=10,宽度=110,字体=font)
grid(列=2,行=15,padx=(10,10))
#创建列表框
Listbox1=TK.Listbox(第二步,selectmode='SINGLE',高度=10,宽度=35,字体=font,导出选择=0)
网格(列=2,行=1,padx=(10,10))
对于LocalTemplate中的i:
列表框1.插入(TK.END,i)
Listbox1.bind(“,self.selection)
Listbox2=TK.Listbox(第二步,selectmode='SINGLE',高度=10,宽度=35,字体=font,导出选择=0)
网格(列=4,行=1,padx=(10,10))
对于seltext中的x:
列表框2.插入(TK.END,x)
Listbox2.bind(“,self.selection)
Listbox3=TK.Listbox(第二步,selectmode='SINGLE',高度=10,宽度=35,字体=font,导出选择=0)
网格(列=6,行=1,padx=(10,10))
#创建按钮
Submit=TK.按钮(self,text='Submit',font=font2)
grid(列=3,行=10,粘性='we',padx=(10,10))
Startover=TK.按钮(self,text='Cancel',font=font2)
grid(列=4,行=10,粘性='we',padx=(10,10))
def选择(自身、val):
发送方=val.Listbox1
index=listbox1.curselection()
value=Listbox1.get(索引[0])
如果索引=1或索引=4:
seltext=软件
elif索引==2或索引==5:
seltext=硬件
elif指数==3:
seltext=mobile
elif指数==6:
seltext=无线
elif指数==7:
seltext=AD
elif指数==8:
seltext=打印机
def main():
app=smartstopkiosk_tk(无)
附录几何(“1300x768”)
app.mainloop()
如果名称=“\uuuuu main\uuuuuuuu”:
main()
我一直在追踪这个错误
文件“C:\python27\lib\lib tk\Tkinter.py”,第1845行,位于getattr
返回getattr(self.tk,attr)
属性错误:选择
谢谢你的帮助
更新!
以下是我如何能够在第一个列表框中输入文本,并根据您的选择填充第二个列表框
def getchoice(event):
seltext = ''
INDEX = Listbox1.curselection()
if INDEX == (0,) or INDEX == (4,):
seltext = software
elif INDEX == (1,) or INDEX == (5,):
seltext = hardware
elif INDEX == (2,):
seltext = mobile
elif INDEX == (3,):
seltext = wireless
elif INDEX == (6,):
seltext = AD
elif INDEX == (7,):
seltext = printers
print INDEX
Listbox2.delete(0, TK.END)
for x in seltext:
Listbox2.insert(TK.END, x)
#Creates List Boxes
Listbox1 = TK.Listbox(stepTwo, selectmode = 'SINGLE', height = 10, width = 35, font = font, exportselection = 0)
Listbox1.grid(column = 2, row = 1, padx = (10, 10))
for x in LocalTemplate:
Listbox1.insert(TK.END, x)
Listbox1.bind("<<ListboxSelect>>", getchoice)
Listbox2 = TK.Listbox(stepTwo, selectmode = 'SINGLE', height = 10, width = 35, font = font, exportselection = 0)
Listbox2.grid(column = 4, row = 1, padx = (10, 10))
Listbox2.bind("<<ListboxSelect>>", getchoice2)
Listbox3 = TK.Listbox(stepTwo, selectmode = 'SINGLE', height = 10, width = 35, font = font, exportselection = 0)
Listbox3.grid(column = 6, row = 1, padx = (10, 10))
def getchoice(事件):
seltext=''
INDEX=Listbox1.curselection()
如果索引==(0,)或索引==(4,):
seltext=软件
elif索引==(1,)或索引==(5,):
seltext=硬件
elif指数==(2,):
seltext=mobile
elif指数==(3,):
seltext
value = widget.get(selection[0])
import Tkinter as TK
class smartstopkiosk_tk(TK.Tk):
def __init__(self, parent):
TK.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
#self.parent.title("Smartstop Kiosk")
software = ('Microsoft', 'Abode', 'SAP', 'Lotus Notes', 'Jive','Cisco', 'Chrome')
hardware = ("Computer", "Charger", " USB Headset", "Keyboard", "Mouse", "Webcam")
microsoft = ("Outlook", "Lync", "Word", "Excel", "PowerPoint", "Visio", "Project", "Publisher")
adobe = ("Adobe Reader", "Java", "Flash", "Adobe Pro")
cisco = ('IP Communicator', '')
wireless = ("MYLOW", "Corporate", "Visitor", "MYLTW")
printers = ("2N", "2S", "3N", "3S", "4N", "4S", "5N", "5S")
mobile = ("Blackberry", "iPhone","iPad")
AD = ("Unlock", "Reset")
LocalTemplate = ('User Assistance with Software', 'User Assistance with Hardware', 'Mobile Device Support', 'Software Installation Request', 'Hardware Request', 'Wireless Connection', 'Password Reset/Username Unlocked',
'Add Printer')
def getchoice2():
print
# use same method to find out which of the second list is chosen, and carry on.
def getchoice():
seltext = ''
INDEX = Listbox1.curselection()
if INDEX == ('0',) or INDEX == ('4',):
seltext = software
if INDEX == ('1',) or INDEX == ('5',):
seltext = hardware
if INDEX == ('2',):
seltext = mobile
if INDEX == ('3',):
seltext = wireless
if INDEX == ('6',):
seltext = AD
if INDEX == ('7',):
seltext = printers
selectchoice.config(command = getchoice2)
for x in seltext:
Listbox2.insert(TK.END, x)
#creates font types
font = ('Times New Roman', 14, 'bold')
font2 = ('Times New Roman',12, 'bold')
#Creates Instructions for Users
stepOne = TK.LabelFrame(self, text=" 1. User Information: ", font = font2)
stepOne.grid(row=0, columnspan=7, sticky='w', padx=5, pady=5, ipadx=5, ipady=5)
stepTwo = TK.LabelFrame(self, text="2. Select Program or Hardware Problems", font = font2)
stepTwo.grid(row=3, columnspan=7, sticky='w', padx=5, pady=5, ipadx=5, ipady=5)
stepThree = TK.LabelFrame(self, text="Please Enter the Problem or Your Request:", font = font2)
stepThree.grid(row=6, columnspan=7, sticky='w', padx=5, pady=5, ipadx=5, ipady=5)
#Creates Label for Users
Label1 = TK.Label(stepOne, text = "First Name", font = font)
Label1.grid(column = 2, row = 0, sticky = 'w', padx = (10, 10))
Label2 = TK.Label(stepOne, text = "Last Name", font = font)
Label2.grid(column = 4, row = 0, sticky = 'w', padx = (10, 10))
Label3 = TK.Label(stepOne, text = "Mylan UserName", font = font)
Label3.grid(column = 6, row = 0, sticky = 'w', padx = (10, 10))
#Creates Entry Box for User input
self.entry = TK.Entry(stepOne, width = 30)
self.entry.grid(column = 2, row = 1,padx = (10, 10))
entry2 = TK.Entry(stepOne, width = 30)
entry2.grid(column = 4, row = 1,padx = (10, 10))
entry3 = TK.Entry(stepOne, width = 30)
entry3.grid(column = 6, row = 1, columnspan = 2, padx = (10, 10))
#Creates User Input Box
Usertext = TK.Text(stepThree, height = 10, width = 110, font = font)
Usertext.grid(column = 2, row = 15, padx = (10, 10))
#Creates List Boxes
Listbox1 = TK.Listbox(stepTwo, selectmode = 'SINGLE', height = 10, width = 35, font = font)
Listbox1.grid(column = 2, row = 1, padx = (10, 10))
for i in LocalTemplate:
Listbox1.insert(TK.END, i)
Listbox2 = TK.Listbox(stepTwo, selectmode = 'SINGLE', height = 10, width = 35, font = font)
Listbox2.grid(column = 4, row = 1, padx = (10, 10))
Listbox3 = TK.Listbox(stepTwo, selectmode = 'SINGLE', height = 10, width = 35, font = font)
Listbox3.grid(column = 6, row = 1, padx = (10, 10))
#Creates Buttons
selectchoice = TK.Button(self, text = 'select my choice', font = font2, command = getchoice)
selectchoice.grid(row = 5, column = 1, sticky = 'we', padx = (10, 10))
Submit = TK.Button(self, text = 'Submit', font = font2)
Submit.grid(column = 3, row = 10, sticky = 'we', padx = (10, 10))
Startover = TK.Button(self, text = 'Cancel', font = font2)
Startover.grid(column = 4, row = 10, sticky = 'we', padx = (10, 10))
def main():
app = smartstopkiosk_tk(None)
app.geometry("1300x768")
app.mainloop()
if __name__ == "__main__":
main()