Получить значения из каждого поля ввода с помощью отдельной кнопки для каждого поля - PullRequest
0 голосов
/ 02 мая 2019

Я создал Entry и кнопки через цикл, как это

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"} кнопка и запись являются диктовками, объявленными выше как запись {} и кнопка {}.

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

Вы можете просто передать ссылку на ввод в командную функцию соответствующей кнопки, как показано ниже:

def do_clipboard_copy(entry):
    text = entry.get() # get the entry content
    print(text)
    # do whatever you know to copy the entry content to clipboard

for i in range(len(headers)):
    row = i // 2
    col = (i % 2) * 2
    entry = Entry(top, width=30)
    entry.grid(row=row, column=col)
    entry.insert(0, headers[i].get('name'))
    Button(top, text='Copy', command=lambda e=entry: do_clipboard_copy(e)).grid(row=row, column=col+1)
0 голосов
/ 02 мая 2019

Я думаю, вы делаете вещи более сложными, чем они должны быть.Вам не нужно помещать свои кнопки в 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()

Результаты:

enter image description here

...