我正在處理我的第一個Tkinter項目,並且已經使用了幾個stackoverflow答案和解釋(以及它們導致的其他鏈接)作爲試圖瞭解如何構建我的應用程序的基礎。在循環中創建的Tkinter複選框
我結構性我的應用程序閱讀這個問題後(大多數來自接受答案的鏈接):Switch between two frames in tkinter
在我的幀中的一個,我需要創建使用for循環複選框。我發現這個頁面有幫助:How do I create multiple checkboxes from a list in a for loop in python tkinter
我很難得到默認情況下(我想要的行爲)最初選中的所有複選框。
我的代碼的相關部分如下(python2.7):
import Tkinter as tk
class Main(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
...
## gets set on a different frame in the application
self.files_list = []
class A(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
...
## self.f_list contains the values (a list of dictionaries) that I am expecting on this frame
self.f_list = controller.files_list
for f in self.f_list:
self.file_name = tk.StringVar()
self.file_name.set(f['file'])
self.run_file = tk.IntVar()
self.run_file.set(1)
cb = tk.Checkbutton(self, text=self.file_name.get(), variable=self.run_file)
cb.pack()
這將產生列表,我期望的「文件名」,每一個複選框。但是,運行時僅檢查循環產生的最後一個複選框。
之前調用pack方法,我把打印語句通過循環打印self.run_file.get(),每次它打印我試圖改變我的循環幾種不同的方法1.
值:
## same behavior
self.run_file = tk.Variable()
self.run_file.set(1)
## same behavior
self.run_file = tk.IntVar(value=1)
## no checkboxes set
cb = tk.Checkbutton(self, text=self.file_name.get(), variable=self.run_file.get())
我覺得自self.file_name的值每次通過循環都是不同的,這裏沒有問題。由於最後一個複選框是默認選中的,它讓我覺得值在前面的複選框中丟失了,但是我不知道如何構造我的複選框或self.run_file變量,以便默認情況下檢查每個框。在閱讀此問題後,我正在使用for循環中的變量:Python, Tkinter : if there a way to check checkboxes by default?
我已經查看了圍繞此主題的許多不同問題,但仍無法得出正確的答案。有人能指引我朝着正確的方向嗎?
使完整意義上的。謝謝,像魅力一樣工作。有點覺得這就是發生了什麼事情,但甚至沒有考慮列入清單。再次感謝。 – avaholic