Кнопка подключения для запуска функции добавления меток - PullRequest
0 голосов
/ 28 мая 2018

Я только что закончил читать книгу по питону «Практическое программирование», 2-е изд.и подумал, что я буду испытывать себя на том, чтобы применить то, что я узнал, чтобы сделать свою первую небольшую программу для работы (магазин товаров для дома), чтобы создать список чипов, которые мне нужно заказать, используя tkinter в качестве интерфейса.Я бы указал, сколько чипов каждой марки у меня есть в наличии, и после нажатия кнопки «Заказать» будет возвращено количество чипов каждой марки, необходимое для заказа.

Вот код I 'у меня так далеко:

import tkinter as tk

# Initiate tkinter
window = tk.Tk()

# Create a dictionary of brand of chips with a value of how many chips should be in stock
chips = {'Miss Vickies Original': 4, 'Miss Vikies Salt & Vinegar': 4}

# Start counting rows
row_num = 0

for brand in chips:

    # Create label describing the brand of chips
    label = tk.Label(window, text=brand)
    label.grid(row=row_num, column=1)

    # Create an entry box to input number of chips in stock
    entry = tk.Entry(window)
    entry.grid(row=row_num, column=2)

    # Add one; To start at next row
    row_num += 1

# Return number of chips to order
def order(entry_data, stock_required):

    # Subtract how much is in stock from how much should be in stock 
    order_quantity = int(stock_required) - int(entry_data)

    # Create label to the left of each chip with how many should be ordered
    order_label = tk.Label(window, text="'Order: ', order_quantity")
    order_label.pack(side='left')

# Order button
button = tk.Button(window, text='Order', command=lambda: order(entry.get(), chips[1]))
button.pack(side='bottom')

window.mainloop()

Я думаю, что я перепутал себя с моим собственным кодом, смеется.Мне очень трудно понять, как заставить кнопку (расположенную внизу) запускать вычисления и показывать order_label слева от каждой метки фишек.

Проблема, с которой я сталкиваюськод, который я не уверен, как исправить это метка будет вызываться только один раз, так как функция не содержит цикл.Каков рекомендуемый способ решения этой проблемы?

Я проверил: Tkinter: Связать виджет ввода с кнопкой для функции Но это не связанная проблема, так как у меня lambda: orderфункция уже включена.

Вот как это должно выглядеть

enter image description here

Это моя первая программа, поэтому любая конструктивная критика приветствуется!Заранее спасибо

1 Ответ

0 голосов
/ 28 мая 2018

Я добавил функциональность, необходимую для того, чтобы ваш код работал так, как вы хотели;Вам нужно будет отслеживать текущий уровень запасов, чтобы сделать это чем-то полезным.

import tkinter as tk


def generate_order_quantities():

    for brand, datafields in chips_entry_fields.items():
        entry, quantity_to_order, label = datafields
        recommended_stock_level = chips_stock_levels[brand]
        try:
            quantity_sold = int(entry.get())
        except ValueError:
            quantity_sold = 0
        quantity_to_order.set(min(quantity_sold, recommended_stock_level))


if __name__ == '__main__':

    # Initiate tkinter
    window = tk.Tk()

    # Create a dictionary of brand of chips_stock_levels with a value of how many chips_stock_levels should be in stock
    chips_stock_levels = {'Miss Vickies Original': 4, 'Miss Vikies Salt & Vinegar': 4}
    chips_quantities_sold = {'Miss Vickies Original': 0, 'Miss Vikies Salt & Vinegar': 0}
    chips_entry_fields = {}

    # Start counting rows
    row_num = 0

    for row, brand in enumerate(chips_stock_levels):
        # Create label describing the brand of chips_stock_levels
        label = tk.Label(window, text=brand)
        label.grid(row=row, column=1)

        # Create an entry box to input number of chips_stock_levels in stock
        entry = tk.Entry(window)
        chips_entry_fields[brand] = [entry]
        entry.grid(row=row, column=2)

        # Create label to the left of each chip with how many should be ordered
        quantity_to_order = tk.IntVar()
        chips_entry_fields[brand].append(quantity_to_order)
        # quantity_to_order.set()
        order_label = tk.Label(window, textvariable=quantity_to_order)
        chips_entry_fields[brand].append(order_label)
        order_label.grid(row=row, column=3)

    # Order button
    button = tk.Button(window, text='Order', command=generate_order_quantities)
    button.grid(row=3, column=3)

    window.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...