如何从同名但不同框架的条目小部件中获取数据

How to getdata from entry widgets with same name but in different frames

提问人:KevP 提问时间:8/6/2023 最后编辑:Bryan OakleyKevP 更新时间:8/9/2023 访问量:39

问:

我创建了 sevearal 框架,并在每个框架中添加了标签和条目小部件等,但我在每个框架中都以相同的方式命名了这些标签和条目小部件。 那么,如何从“frame.entry”中唯一地获取条目数据

即下面是所有工作正常的唯一名称:

import tkinter as tk

window = tk.Tk()

def get_b1():
    x = e1.get()
    if x == "":
        l1.configure(text = "Enter something")
    else: 
        l1.configure(text = x)
    
def get_b2():
    x = e2.get()
    if x == "":
        l2.configure(text = "Enter something")
    else: 
        l2.configure(text = x)
    
f1 = tk.Frame(master=window, relief=tk.RAISED, borderwidth=1)
f2 = tk.Frame(master=window, relief=tk.RAISED, borderwidth=1)

b1 = tk.Button(f1, text = "Press me", command = get_b1)
b2 = tk.Button(f2, text = "Press me", command = get_b2)

e1 = tk.Entry(f1)
e2 = tk.Entry(f2)

l1 = tk.Label(f1, text="I'm in frame 1")
l2 = tk.Label(f2, text="I'm in frame 2")

f1.grid(row=0, column=0)
f2.grid(row=1, column=0)

b1.grid( row=0, column=0)
e1.grid( row=0, column=1)
l1.grid( row=0, column=2)

b2.grid( row=0, column=0)
e2.grid( row=0, column=1)
l2.grid( row=0, column=2)

但是如果我将 f2 小部件重命名为 b1、e1、l1 等, 这惨遭失败: 这是否意味着小部件都必须具有唯一的名称,我不认为是这样?

import tkinter as tk

window = tk.Tk()

def get_f1_b1():
    x = e1.get()
    if x == "":
        l1.configure(text = "Enter something")
    else: 
        l1.configure(text = x)
    
def get_f2_b1():
    x = e1.get()
    if x == "":
        l1.configure(text = "Enter something")
    else: 
        l1.configure(text = x)
    
f1 = tk.Frame(master=window, relief=tk.RAISED, borderwidth=1)
f2 = tk.Frame(master=window, relief=tk.RAISED, borderwidth=1)

b1 = tk.Button(f1, text = "F1, Press me", command = get_f1_b1)
b1 = tk.Button(f2, text = "F2, Press me", command = get_f2_b1)

e1 = tk.Entry(f1)
e1 = tk.Entry(f2)

l1 = tk.Label(f1, text="I'm in frame 1")
l1 = tk.Label(f2, text="I'm in frame 2")

f1.grid(row=0, column=0)
f2.grid(row=1, column=1)

b1.grid(row=0, column=0)
e1.grid(row=0, column=1)
l1.grid(row=0, column=2)

b1.grid(row=1, column=0)
e1.grid(row=1, column=1)
l1.grid(row=1, column=2)
Python tkinter 小部件 名称

评论

0赞 Danya K 8/6/2023
我认为您错过了变量/实例如何工作的想法。例如,这两行: 并创建两个条目,但变量 e1 将仅引用最后一个条目(f2 的条目),因为您重置/重新分配它。e1 = tk.Entry(f1)e1 = tk.Entry(f2)
0赞 KevP 8/6/2023
好的,所以每个条目,无论它在哪个框架中,都必须是一个唯一的名称?
0赞 Bryan Oakley 8/9/2023
@KevP:是的,如果你想通过变量来引用小部件。这是编程的基础,它不是 tkinter 或 python 独有的。

答: 暂无答案