<p>由于在for循环中使用了相同的名称集,因此在for循环之后,名称集指向最后的赋值</p>
<p>其中一种方法是使用<a href="https://docs.python.org/3/library/functools.html#functools.partial" rel="nofollow noreferrer">^{<cd1>}</a>将标签的当前引用传递给每个循环中的两个函数:</p>
<pre class="lang-py prettyprint-override"><code>from functools import partial
def add_qty(item, qtity_label, price_lbl):
qty = qtity_label.cget('text')
qty += 1
qtity_label.config(text=qty)
price_lbl.config(text=shopping_basket[item]*qty)
print(qty)
def sub_qty(item, qtity_label, price_lbl):
qty = qtity_label.cget('text')
qty -= 1
qtity_label.config(text=qty)
price_lbl.config(text=shopping_basket[item]*qty)
print(qty)
...
for item in shopping_basket:
item_name_lbl = Label(root, text=item)
item_name_lbl.grid(column=0, row=row)
qtity_label = Label(root, text=2)
qtity_label.grid(column=5, row=row)
price_lbl = Label(root, text=qtity_label.cget('text')*shopping_basket[item])
price_lbl.grid(column=9, row=row)
sub_qtity_btn = Button(root, text='-', command=partial(sub_qty, item, qtity_label, price_lbl))
sub_qtity_btn.grid(column=4, row=row)
add_qtity_btn = Button(root, text='+', command=partial(add_qty, item, qtity_label, price_lbl))
add_qtity_btn.grid(column=6, row=row)
row += 1
</code></pre>