组合框值在动态创建时未在 python 中选择

combobox value is not selecting in python when it is created dynamically

我创建了一个 Tkinter window 表单,基于用户的选择,我通过删除 Exist one.But 动态替换组合框 one.But 问题是当我这样做时,在组合框中选择的值是not updated.It 始终显示默认值。看下面的代码

from Tkinter import * 
import ttk
final=[]
field_0=['1','0']
field_1=['1','2','23','45','6']
field_2=['2','5','7','8','9']

class header:
    def __init__(self,root):
        self.parent=root
        self.row_number= 1
        self.value=0
        root.title("                                    Select fields                                     ")
        root.minsize(width=450, height=530)
        root.maxsize(width=450, height=550)
        frame=Frame(root,height=20,relief=FLAT)
        frame.grid(row=0,column=0,sticky=W)
        Label(frame,text="Enter value:").grid(row=0,column=0,padx=70,pady=5,sticky=W)
        entryValue=StringVar()
        port_e = Entry(root,width=5,textvariable=entryValue)
        port_e.delete(0,END)
        port_e.insert(0,'0')
        port_e.grid(row=0,column=0,padx=100,pady=5)
        self.value=self.value+1
        self.change_row=self.row_number
        self.combocreate(self.change_row,root,field_0)
        self.change_row=self.change_row+1
        self.combocreate(self.change_row,root,field_1)



    def  combocreate(self,row_number,msg_frame,field):
        comboBoxValue = []              # 'request'command  for sink only
        self.box_value=StringVar()
        self.combo=ttk.Combobox(root,textvariable=self.box_value,state='readonly')
        self.combo['values'] = tuple(field)
        self.combo.set(field[1])
        self.combo.grid(row = row_number, column = 1)
        self.combo.bind("<<ComboboxSelected>>",self.selected_field)
        final.append(self.combo)

    def selected_field(self,event):
       global cnt_sel
       print final[0].get()

       if(final[0].get()=='1'):
            self.control=Label(root,text="Choose one type").grid(row=self.change_row,column=0,padx=20,pady=5,sticky=W)
            self.combocreate(self.change_row,root,field_1)
            final[1]=final[2]    #replacing combobox dynamically based on selection
            del final[2]
       elif(final[0].get()=='0'):
            Label(root,text="Choose zerotype     ").grid(row=self.change_row,column=0,padx=20,pady=5,sticky=W)
            self.combocreate(self.change_row,root,field_2)
            final[1]=final[2]
            del final[2]
       else:
            pass

if __name__=="__main__":
    root=Tk()
    app=header(root)
    root.mainloop()

您的代码的问题是每次调用 combocreate 时,它都会自动将 Combobox 绑定到 self.selected_field,因此无论何时更改 Combobox 类型的值,您调用 self.selected_field,它会自动将类型重置为默认值。要解决此问题,您应该只绑定第一个 Combobox。这应该可以解决问题:

替换

self.change_row=self.row_number
self.combocreate(self.change_row,root,field_0)
self.change_row=self.change_row+1
self.combocreate(self.change_row,root,field_1)

self.change_row=self.row_number
self.combocreate(self.change_row,root,field_0)
final[0].bind("<<ComboboxSelected>>",self.selected_field)
self.change_row=self.change_row+1
self.combocreate(self.change_row,root,field_1)

def combocreate(self,row_number,msg_frame,field):
    comboBoxValue = []              # 'request'command  for sink only
    self.box_value=StringVar()
    self.combo=ttk.Combobox(root,textvariable=self.box_value,state='readonly')
    self.combo['values'] = tuple(field)
    self.combo.set(field[1])
    self.combo.grid(row = row_number, column = 1)
    self.combo.bind("<<ComboboxSelected>>",self.selected_field)
    final.append(self.combo)

def combocreate(self,row_number,msg_frame,field):
        comboBoxValue = []              # 'request'command  for sink only
        self.box_value=StringVar()
        self.combo=ttk.Combobox(root,textvariable=self.box_value,state='readonly')
        self.combo['values'] = tuple(field)
        self.combo.set(field[1])
        self.combo.grid(row = row_number, column = 1)

        final.append(self.combo)