框架的滚动小部件,其中包括复选框

时间:2020-06-07 11:45:16

标签: python tkinter scrollbar

我正在尝试向包含许多复选框的右手第二帧添加垂直滚动小部件。

我尝试为在其中动态创建复选框的框架创建滚动小部件,对于本示例,我已硬编码了框架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()


0 个答案:

没有答案