Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何选择列表框,并根据该选择创建第二个列表框?_Python_Python 2.7_Python 3.x_Tkinter_Tk - Fatal编程技术网

Python 如何选择列表框,并根据该选择创建第二个列表框?

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

所以我仍然在学习tkinter。我有三个列表框,第一个有一定数量的选项。当用户选择一个选项时,第二个列表框需要根据之前的选择进行填充。这是我试过的代码。我正在使用python 2.7 更新:

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()