2016-04-22 148 views
-1

我試圖創建3組不同長度的複選框列表,然後在tkinter GUI中的頁面上的三列中顯示它們。列表1將是一個基於整數的列表,其中2個是字符串。這些列表名稱的變量在GUI啓動之前在代碼中定義。 N_index = [1, 2, 3] T_index = [T1, T2, T3] P_index = [P1, P2, P3]在tkinter中創建多個複選框

的列表的長度將每個代碼運行所以時間改變我已經使用這個:

N_leng = range(1, int(len(N_index)+1)) T_leng = range(1, int(len(T_index)+1)) P_leng = range(1, int(len(P_index)+1))

我已經部分使用的代碼來創建我的GUI是從這裏取的Switch between two frames in tkinter(謝謝)

我試圖將這些列表放入第一頁。我有3組複選框。當我運行它運行的代碼並且永遠不會結束。但是即使在調試模式下它也不會產生錯誤。有人能發現我的錯誤嗎?

def ckbox_params(): 
     for i, j in zip(N_index, N_leng): 
      ivar = tk.IntVar() 
      N_selection1 = tk.Checkbutton(f, text="%d" % i, variable=ivar, onvalue=i, offvalue="") 
      N_selection1.grid(sticky="nw", pady=4) 

     for i, k in zip(T_index, T_leng): 
      svar = tk.StringVar() 
      T_selection1 = tk.Checkbutton(f, text="%s" % i, variable=svar, onvalue=i, offvalue="") 
      T_selection1.grid(sticky="nw", pady=4) 

     for i, l in zip(P_index, P_leng): 
      svar = tk.StringVar() 
      P_selection1 = tk.Checkbutton(f, text="%s" % i, variable=svar, onvalue=i, offvalue="") 
      P_selection1.grid(sticky="nw", pady=4) 
    ckbox_params()` 

任何建議,想法或解決方案將有助於我做錯了什麼。

謝謝

+0

你在哪裏創建根窗口? 'ckbox_params'如何知道'f'?如果您發佈[mcve],這將有所幫助。 –

+0

你爲什麼要做int(len(...))'? 'len'返回一個int。 –

+0

對不起PM 2Ring我不知道你需要多少信息。我對這一切都很陌生,這是我第一次嘗試OOP,所以我犯了錯誤。 – OParker

回答

1

的問題是,你正在使用pack的標籤,grid的複選框,但無論是標籤和複選框共享相同的父。

class PageOne(tk.Frame): 

    def __init__(self, parent, controller): 
     ... 
     label = ttk.Label(f, text="Page One", font=LARGE_FONT) 
     label.pack(pady=10, padx=10) 
     ... 
     N_selection1 = tk.Checkbutton(f, text="%d" % i, variable=ivar, onvalue=i, offvalue="") 
     N_selection1.grid(sticky="nw", pady=4) 
     ... 

這樣,你就不能混用packgrid。對於所有直接位於f內的小部件,您必須使用其中一個。

+0

你是絕對正確的謝謝你!現在工作! – OParker