根据列表中的项目创建条目和复选框

问题描述

这是我正在处理的tkinter应用程序的一部分,我需要输入列表,并使用它来创建一个带有条目和复选框的窗口,用于列表中的每个项目。单击复选框后,我想用认值填写相应的条目。但是,我编写的代码似乎认为所有复选框都对应于最后一个条目小部件。我需要在列表中进行迭代并生成可在外部函数中访问列表中每个项目的小部件的帮助。这是我的代码,将python 3.8.6和IDLE一起使用:

import tkinter as tk
from tkinter import StringVar,Intvar

groups = ['A','B','C']

def update_var(item,e_dict,cb_val):   
    print(item)
    print(e_dict[item].get())
    print(cb_val[item].get())
    
    if cb_val[item].get() == 1:
        e_dict[item].set('CHECKBox IS CLICKED')

def submit():
    pass

class App(tk.Tk):
    def __init__(self,*args,**kwargs):
        tk.Tk.__init__(self,**kwargs)
        self.container = tk.Frame(self)

        self.container.pack(side='top',fill='both',expand=True)

        self.container.grid_rowconfigure(0,weight=1)
        self.container.grid_columnconfigure(0,weight=1)

        self.show_frame(MainWindow)

    def show_frame(self,cont):
        frame = cont(self.container,self)
        frame.grid(row=0,column=0,sticky='nsew')
        frame.tkraise()

class MainWindow(tk.Frame):
    def __init__(self,parent,controller,**kwargs):
        global group_dict
        
        tk.Frame.__init__(self,**kwargs)
        
        container = tk.Frame()

        canvas = tk.Canvas(container)
        scrollbar = tk.Scrollbar(container,orient='vertical',command=canvas.yview)
        scrollable_frame = tk.Frame(canvas)

        scrollable_frame.bind(
            '<Configure>',lambda e: canvas.configure(
                scrollregion=canvas.bBox('all')
                )
            )

        canvas.create_window((0,0),window=scrollable_frame,anchor='nw')

        canvas.configure(yscrollcommand=scrollbar.set)

        label1 = tk.Label(scrollable_frame,text='SAMPLE PROGRAM')
        label1.config(font=('Arial',20))
        label1.grid(row=0,columnspan=3,padx=2,pady=2)

        label2 = tk.Label(scrollable_frame,text='GROUP',width=13)
        label2.config(font=('Arial',15))
        label2.grid(row=1,pady=2)

        label3 = tk.Label(scrollable_frame,text='INPUT',width=13)
        label3.config(font=('Arial',15))
        label3.grid(row=1,column=1,pady=2)

        label4 = tk.Label(scrollable_frame,text='CHECKBox',width=13)
        label4.config(font=('Arial',15))
        label4.grid(row=1,column=2,pady=2)

        e_dict = {}
        cb_val = {}
        num_lines = 0

        group_list = []
        
        for i,item in enumerate(groups):
            tk.Label(scrollable_frame,text=item,width=20).grid(row=i+2,pady=2)
            
            e_dict[item] = StringVar()
            tk.Entry(scrollable_frame,textvariable=e_dict[item]).grid(row=i+2,pady=2)

            #group_list.append(key)
            cb_val[item] = Intvar()
            tk.Checkbutton(scrollable_frame,variable = cb_val[item],command=lambda: update_var(item,cb_val)).grid(row=i+2,pady=2)

            num_lines += 2

        submit_btn = tk.Button(scrollable_frame,text='SUBMIT',width=20,command = lambda: submit())
        submit_btn.config(font=('Arial',12))
        submit_btn.grid(row=num_lines+1,columnspan=2)

        container.place(x=0,y=0,width=490,height=640)
        scrollbar.pack(side="right",fill="y")
        canvas.pack(side='left',expand=True)
        
if __name__ == '__main__':
    root = App()
    root.mainloop()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...