Python 连接按钮以运行添加标签的函数

Python 连接按钮以运行添加标签的函数,python,python-3.x,button,tkinter,Python,Python 3.x,Button,Tkinter,我刚刚读完了一本名为《实用编程第二版》的Python书籍,我想我应该挑战自己,将我所学的知识应用到我的第一个工作便利店小程序中,创建一个使用tkinter作为接口订购的芯片列表。 我会输入每个品牌的芯片库存数量,按下“订购”按钮后,它会返回需要订购的每个品牌芯片的数量 以下是我目前掌握的代码: import tkinter as tk # Initiate tkinter window = tk.Tk() # Create a dictionary of brand of chips wit

我刚刚读完了一本名为《实用编程第二版》的Python书籍,我想我应该挑战自己,将我所学的知识应用到我的第一个工作便利店小程序中,创建一个使用tkinter作为接口订购的芯片列表。 我会输入每个品牌的芯片库存数量,按下“订购”按钮后,它会返回需要订购的每个品牌芯片的数量

以下是我目前掌握的代码:

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()
我想我把自己和我自己的代码lol搞混了。我很难弄清楚如何让底部的按钮触发计算,并在每个芯片标签的左侧显示order_标签

我在代码中看到的一个问题是,我不确定如何修复这个标签,因为该函数不包含循环,所以只能调用一次。解决这个问题的推荐方法是什么

我查过了。 但这不是一个相关的问题,因为我已经有了lambda:order函数

下面是它的外观:


这是我的第一个节目,因此鼓励任何建设性的批评

我添加了使代码按预期工作所需的功能;不过,您需要跟踪当前的库存水平,以使其变得有用

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()

我把所有的芯片都填到字典里,它超过了GUI中的tkinter窗口。我查看了文档中的滚动选项:,但运气不好。滚动是最好的解决方案吗?还是有更好的?