2015-09-04 68 views
0

我創建了一個Tkinter的窗口表格,在基於用戶選擇我動態地刪除存在one.But問題更換組合框時,我不喜歡這樣的值在組合框中選擇不更新。它始終顯示默認值。看到下面的代碼組合框的值未在蟒選擇是動態創建的,當它

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

回答

0

與您的代碼的問題是,每次combocreate被調用時,它會自動綁定Comboboxself.selected_field,所以每當你改變類型組合框的值,則自動調用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) 
+0

感謝您的幫助。現在我能夠訪問該值。 – Chandra