首页 > 解决方案 > 通过每个框的单个按钮从每个输入框获取值

问题描述

我通过一个循环创建了条目和按钮,就像这样

for i in range(len(headers)):
        pos_y = 0;

        e = tk.Entry(top, width = 30);
        e.grid(row = pos_x, column = pos_y);
        entry[i] = e;
        e.insert(0, headers[pos_x].get('name'));
        pos_y += 1;

        b = tk.Button(top, text = 'Copy');
        b.grid(row = pos_x, column = pos_y);
        button[i] = b;
        pos_y += 1;

我有两个用于 Entry 和 Button 的字典,输出是这样的。 输出

我想要做的是对于每个按钮,我想将值从文本框复制到剪贴板。我知道如何复制到剪贴板,只是得到相应的值就是问题所在。编辑:标题是字典列表;pos_x 用于从一行切换到另一行;pos_y 用于切换到下一列。在这里,我在字典上进行迭代,以将名称从 dict 获取到第一个文本框,并将值获取到另一个文本框。像这样 :{"name": "key", "value": "2500"} button 和 entry 是字典,上面声明为 entry{} 和 button{}。

标签: pythontkintertkinter-entry

解决方案


我认为你让事情变得比他们需要的更复杂。您不需要将按钮放在 dict/list 中,因为它们在创建后不会更改。而是考虑使用一个简单的列表来记录您的条目值,然后在需要它们时使用它们的索引来调用它们的 get 方法。

这是我的例子。如果您有任何问题,请告诉我。

import tkinter as tk


class Example(tk.Tk):
    def __init__(self):
        super().__init__()
        self.entry_list = []

        r = 0
        c = 0
        for i in range(6):
            self.entry_list.append(tk.Entry(self, width=30))
            self.entry_list[-1].grid(row=r, column=c)
            tk.Button(self, text='Copy', command=lambda ndex=i: self.copy_to_clipboard(ndex)).grid(row=r, column=c+1)
            if r == 2:
                c += 2
                r = 0
            else:
                r += 1

    def copy_to_clipboard(self, ndex):
        print(self.entry_list[ndex].get())
        self.clipboard_clear()
        self.clipboard_append(self.entry_list[ndex].get())

Example().mainloop()

结果:

在此处输入图像描述


推荐阅读