问题描述
这是我正在处理的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 (将#修改为@)