我正在尝试向包含许多复选框的右手第二帧添加垂直滚动小部件。
我尝试为在其中动态创建复选框的框架创建滚动小部件,对于本示例,我已硬编码了框架2中的复选框数量。 我目前没有找到任何可行的解决方案
以下是我一直在努力的代码。
from array import *
from tkinter import *
import tkinter as tk
def my_function_01():
f = open("demofile2.txt", "w")
incr_counter=0
for index1,step in enumerate(step_list):
if (str(step_disct[index1].get())=="True"):
f.write("Step: " + step)
f.write("\nOutput Variables: \n")
for index2, field in enumerate(fields_output):
if (str(field_output_dict[index2].get())=="True"):
f.write(field)
f.write("\n")
for index3 in range(len(increment_list[index1])):
if (str(incr_disct[incr_counter].get())=="True"):
f.write(str(increment_list[index1][index3]))
f.write("\n")
incr_counter+=1
f.write("\n")
f.write("\n")
f.write("\n")
if (str(chk_btn_inc_his_data.get())=="True"):
f.write("History data included")
f.close()
def my_function_02():
incr_counter=0
for index1,step in enumerate(step_list):
if (str(step_disct[index1].get())=="False"):
for index3 in range(len(increment_list[index1])):
incr_disct[incr_counter].set(False)
incr_counter+=1
elif (str(step_disct[index1].get())=="True"):
for index3 in range(len(increment_list[index1])):
incr_disct[incr_counter].set(True)
incr_counter+=1
fields_output=["RF","SENER","AC YIELD","STRAINFREE","TEMP","S","UR","PEEQ","LE","RM","U"]
step_list=["Step_01","Step_02","Step_03","Step_04","Step_05","Step_06","Step_07"]
increment_list=[["incr_01","incr_02","incr_03","incr_04","incr_05","incr_06","incr_07","incr_08","incr_09","incr_10","incr_11","incr_12","incr_13"],
["incr_01","incr_02","incr_03","incr_04","incr_05","incr_06","incr_07","incr_08","incr_09","incr_10","incr_11","incr_12","incr_13"],
["incr_01","incr_02","incr_03","incr_04","incr_05","incr_06","incr_07","incr_08","incr_09","incr_10","incr_11","incr_12","incr_13"],
["incr_01","incr_02","incr_03","incr_04","incr_05","incr_06","incr_07","incr_08","incr_09","incr_10","incr_11","incr_12","incr_13"],
["incr_01","incr_02","incr_03","incr_04","incr_05","incr_06","incr_07","incr_08","incr_09","incr_10","incr_11","incr_12","incr_13"],
["incr_01","incr_02","incr_03","incr_04","incr_05","incr_06","incr_07","incr_08","incr_09","incr_10","incr_11","incr_12","incr_13"],
["incr_01","incr_02","incr_03","incr_04","incr_05","incr_06","incr_07","incr_08","incr_09","incr_10","incr_11","incr_12","incr_13"],
["incr_01","incr_02","incr_03","incr_04","incr_05","incr_06","incr_07","incr_08","incr_09","incr_10","incr_11","incr_12","incr_13"]]
root = tk.Tk()
frame_lh =LabelFrame(root, text="Field Outputs")
frame_lh.grid(row=0,sticky=N)
##scroll_bar = Scrollbar(root).grid(column=1,sticky=tk.NS)
frame_rh01 = LabelFrame(root, text="Frame selection",)
frame_rh01.grid(row=0,column=1)
canvas = Canvas(frame_rh01,bg="blue", height=500, width=300)
frame_rh = Frame(canvas)
frame_rh.grid(row=0,column=0)
vbar=Scrollbar(frame_rh,orient=VERTICAL)
vbar.grid(sticky='e')#pack(side=RIGHT,fill=Y)
vbar.config(command=canvas.yview)
myscrollbar=Scrollbar(frame_rh01,orient="vertical",command=canvas.yview)
canvas.configure(yscrollcommand=myscrollbar.set)
myscrollbar.grid(column=1,sticky='ns')
canvas.grid(row=0,sticky='ns')
canvas.config( yscrollcommand=vbar.set)
frame_bt = Frame(root, )
frame_bt.grid(row=1,column=0)
field_output_dict = {}
for index, field in enumerate(fields_output):
var = tk.BooleanVar() # Create a variable for each Checkbutton
var.set("True")
c = tk.Checkbutton(frame_lh, text=field, variable=var)
c.grid(row=index, sticky=tk.W)
field_output_dict[index] = var # save reference to the variable
step_disct={}
incr_disct={}
incr_counter=0
for index1,each_stp in enumerate(step_list):
var = tk.BooleanVar() # Create a variable for each Checkbutton
var.set("True")
c = tk.Checkbutton(canvas, text=each_stp, variable=var,command=my_function_02)
c.grid(row=index1+incr_counter, sticky=tk.W)
step_disct[index1] = var # save reference to the variable
for each_incr in range(len(increment_list[index1])):
var = tk.BooleanVar() # Create a variable for each Checkbutton
var.set("True")
Checkbutton_name2=increment_list[index1][each_incr]
c = tk.Checkbutton(canvas, text=Checkbutton_name2,padx=20, variable=var)
c.grid(row=index1+1+incr_counter, sticky=tk.W)
incr_disct[incr_counter]=var
incr_counter+=1
chk_btn_inc_his_data=tk.BooleanVar() # Create a variable for each Checkbutton
chk_btn_inc_his_data.set("True")
tk.Checkbutton(frame_bt, text="Include history data",variable=chk_btn_inc_his_data).grid(row=0,sticky=W)
b = tk.Button(frame_bt, text="Submit_data", command=my_function_01).grid(row=2,sticky=W)
root.mainloop()