Найти - Пользователи
Полная версия: Вопрос по tkinter
Начало » GUI » Вопрос по tkinter
1
ayb
Здравствуйте, есть такой код :
class Search_by_dates_window_output(Tk): # Класс вывода резултатов поиска по диапазону дат
    def __init__(self, date_one, date_two):
        Toplevel.__init__(self)
        # Инициализация
        self.title('aybdb - Результаты поиска')
        units_list = get_units_from_db_by_date(date_one, date_two)
        total_units = len(units_list)*2
        unit_i = 1
        sep_i = 2
        i = 0
        # Заголовки
        self.name_label_title = Label(self, text='Наименование товара', font=('Trebuchet ms', 16))
        self.expire_date_label_title = Label(self, text='Срок годности', font=('Trebuchet ms', 16))
        self.quantity_label_title = Label(self, text='Кол-во', font=('Trebuchet ms', 16))
        self.control_functions_label = Label(self, text='Управление', font=('Trebuchet ms', 16))
        self.name_label_title.grid(row=0, column=0, padx=5, pady=5)
        self.expire_date_label_title.grid(row=0, column=1, padx=5, pady=5)
        self.quantity_label_title.grid(row=0, column=2, padx=5, pady=5)
        self.control_functions_label.grid(row=0, columnspan=2, column=3, padx=5, pady=5)
        # Цикл формирования результатов
        while unit_i <= total_units:
            self.name = StringVar()
            self.expire_date = StringVar()
            units_set = units_list[i]
            self.name.set(units_set[0])
            self.expire_date.set(units_set[2])
            quantity = units_set[1]
            self.name_label = Label(self, textvariable=self.name, font=('Trebuchet ms', 16))
            self.expire_date_label = Label(self, textvariable=self.expire_date, font=('Trebuchet ms', 16))
            self.quantity_label = Entry(self, width=2)
            self.quantity_label.insert(END,quantity)
            self.edit_button = ttk.Button(self, text='Редактировать', command=self.edit_button_function)
            self.delete_button = ttk.Button(self, text='Удалить')
            self.separator = ttk.Separator(self, orient=HORIZONTAL)
            self.name_label.grid(row=unit_i, column=0, padx=3, pady=3)
            self.expire_date_label.grid(row=unit_i, column=1, padx=3, pady=3)
            self.quantity_label.grid(row=unit_i, column=2, padx=3, pady=3)
            self.edit_button.grid(row=unit_i, column=3, padx=3, pady=3)
            self.delete_button.grid(row=unit_i, column=4, padx=3, pady=3)
            self.separator.grid(row=sep_i, columnspan=5, sticky=EW, padx=3, pady=3)
            unit_i = unit_i + 2
            sep_i = sep_i + 2
            i = i + 1
    def edit_button_function(self):
        update_unit(self.name_label.cget('text'),self.expire_date_label.cget('text'),self.quantity_label.get())
        confirmation_window = Confirmation_window(self.name)
        confirmation_window.mainloop()

Смысл в том, что генерируется список вида - название / срок годности / кол-во и возле каждой позиции кнопки удалить и редактировать. К кнопке редактировать привязана функция. Как заставить эту функцию брать аргументы из нужного поля. В текущем виде данная функция берет аргументы из последнего поля.
4kpt_II
Давайте упростим задачу.
Есть, допустим, три поля ввода. Рядом с ними две кнопки: удалить и редактировать.
Если я нажимаю удалить что происходит с GUI и если я нажимаю редактировать, то что должно происходить?

P.S. Готов помочь, но код реально лень лапатить.
ayb
Решено, код переписан.

Если я нажимаю удалить что происходит с GUI и если я нажимаю редактировать, то что должно происходить?

Должна выполняться функция, которая берет переменные из этих полей ввода.
4kpt_II
Я понял, что ответ уже не нужен. Но я все же рекомендую глянуть сюда:

Нажимаем тут

Тут написано, почему нельзя использовать инструкцию

from Tkinter import *

И несколько маленьких замечений:
- от Toplevel наследовать не верно;
- mainloop() лучше вынести вне класса.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB