繁体   English   中英

如何在 Python 中使用 Tkinter 从条目小部件列表中获取()值

[英]How to Get() values from a list of entry widgets using Tkinter in Python

每次按下时,我都使用一个按钮来添加一个新的条目小部件,这很有效。 但是,每当我遍历列表以获取条目小部件中的值时,都会收到错误消息:

AttributeError: 'list' object has no attribute 'get'

我错过了什么? 我发现了类似的问题,但答案对我不起作用。

重现步骤:

  1. 运行此代码

  2. 单击“添加系统块”以添加条目小部件

  3. 在入口块中输入一些东西

  4. 单击“获取条目值”预期结果:在条目块中输入的任何内容都会打印到控制台

    from tkinter import * import tkinter as tk from matplotlib.figure import Figure from matplotlib.backends.backend_tkagg import(FigureCanvasTkAgg, NavigationToolbar2Tk) import numpy as np class MyApp: def __init__(self, parent): self.myParent = parent ###remember my parent, the root parent.geometry("500x300+0+0") #Default window size global system_block_list, num_of_block system_block_list = [] num_of_block = 0 self.frm_detail=tk.Frame( master=root, relief=tk.RAISED, borderwidth=1, height=100, bg="#e0e0e0" ) self.frm_detail.rowconfigure([0,1], weight=0) self.frm_detail.columnconfigure(0, weight=1, minsize=50) self.frm_detail.columnconfigure(1, weight=10, minsize=50) self.frm_detail.grid(row=0,column=0, sticky="nsew") lbl_detail = tk.Label(master=self.frm_detail, text="System Diagram", bg="white", fg="black") lbl_detail.grid(row=0,column=0, columnspan=2, sticky="new") """""Diagram Buttons Frame""""" self.frm_diagram_btns=tk.Frame( master=self.frm_detail, relief=tk.RAISED, borderwidth=1, height=300, bg="#e0e0e0" ) self.frm_diagram_btns.grid(row=1,column=0, rowspan=1, sticky="nsew") self.btn_add_block = tk.Button( text="Add System Block", width=20, height=1, bg="#c4fffe", fg="black", master=self.frm_diagram_btns, relief=RAISED ) self.btn_add_block.pack() self.btn_add_block.pack_propagate(0) self.btn_add_block.bind("<Button-1>", self.handle_add_block) self.btn_get_values = tk.Button( text="Get Entry Values", width=20, height=1, bg="#c4fffe", fg="black", master=self.frm_diagram_btns, relief=RAISED ) self.btn_get_values.pack() self.btn_get_values.pack_propagate(0) self.btn_get_values.bind("<Button-1>", self.handle_button1) """""Block Diagram Frame""""" self.frm_block_diagram=tk.Frame( master=self.frm_detail, relief=tk.RAISED, borderwidth=1, height=300, bg="#e0e0e0" ) self.frm_block_diagram.grid(row=1,column=1, rowspan=1, sticky="nsew") '''TEST STARTS HERE''' def handle_button1(self, event): #Get value in filename entry global system_block_list values = [int(entry.get()) for entry in system_block_list] print(values) return values def handle_add_block(self, event) : global system_block_list, num_of_block '''Generate a new Entry Widget and use grid to place it in frm_block_diagram''' system_block_list.append([tk.Entry(self.frm_block_diagram, relief="raised",width=10,bg="white",fg="black")]) system_block_list[-1][0].grid(row=0, column=num_of_block, sticky='nsew', ipadx=5, ipady=10, padx=10, pady=10) system_block_list[-1][0].grid_propagate(0) '''reconfigure frm_block_diagram for another column''' self.frm_block_diagram.columnconfigure(num_of_block, weight=1) num_of_block += 1 return num_of_block #Run the event loop root = tk.Tk() myapp = MyApp(root) root.mainloop()

正如杰森哈珀指出的那样。 system_block_list 不是条目列表,而是条目列表的列表。 因此改变:

system_block_list.append([tk.Entry(self.frm_block_diagram, relief="raised",width=10,bg="white",fg="black")])
system_block_list[-1][0].grid(row=0, column=num_of_block, sticky='nsew', ipadx=5, ipady=10, padx=10, pady=10)
system_block_list[-1][0].grid_propagate(0)

entry = tk.Entry(self.frm_block_diagram, relief="raised",width=20,bg="white",fg="black")
system_block_list.append(entry)
system_block_list[-1].grid(row=0, column=num_of_block, sticky='nsew', ipadx=5, ipady=10, padx=10, pady=10)
system_block_list[-1].grid_propagate(0)

一切都更好!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM