我最近开始使用tkinter,尝试为til系统创建一个非常基本的GUI。我们的想法是有8个复选框,代表8个不同的项目,勾选或取消勾选复选框后,显示订单总价的标签会相应更改。
此处的代码显示了我目前与复选框和价格相关的内容。我希望LabelP(价格标签)显示在任何给定时间在菜单上选择的价格。我目前的尝试似乎并不奏效。我对tkinter一般都比较新,所以任何帮助都会受到赞赏。
答案 0 :(得分:0)
这样的事情怎么样?我正在使用字典来存储每个项目的复选框,价格,名称和变量(保存已选中/未选中的值)。
如果选中了复选框,则重新计算方法。
重新计算方法查看选择了哪些项目,并将其价格添加到屏幕上显示的总数中。
这样您就不必对每个项目进行“硬编码”,只需在stock_items
列表中添加一个新项目,它就会在您运行代码时显示在屏幕上。
比你的例子更先进,但会做你想要的。
try:
import tkinter as tk
except:
import Tkinter as tk
import time
#Create an array containing our stock items
#Each item is a dictionary with price and name fields
stock_items = []
stock_items.append({'price':2.0,'name':'Item 1'})
stock_items.append({'price':1.5,'name':'Item 2'})
stock_items.append({'price':5,'name':'Item 3'})
stock_items.append({'price':7,'name':'Item 4'})
class Till(tk.Frame):
def __init__(self,master=None,**kw):
tk.Frame.__init__(self,master=master,**kw)
self.price_string=tk.StringVar()
tk.Label(self,text="Price: ").grid(row=0,column=0)
tk.Label(self,textvariable=self.price_string).grid(row=0,column=1)
self.items = []
#For each stock item, create an IntVar, a checkbox and keep record of the price/name
for idx,item in enumerate(stock_items):
new_item = {}
new_item['var'] = tk.IntVar()
new_item['check'] = tk.Checkbutton(self,
text=item['name'],
variable=new_item['var'],
command=self.recalculate)
new_item['check'].grid(row=idx+1)
new_item['name'] = item['name']
new_item['price'] = item['price']
self.items.append(new_item)
#Recalculate is called when ever a checkbox is checked/unchecked
def recalculate(self):
total_price = 0
#Go through each item and if it is selected add its price to the total
for item in self.items:
if item['var'].get():
total_price += item['price']
#Display out total price
self.price_string.set('£/$ {:.2f}'.format(total_price))
if __name__ == '__main__':
root = tk.Tk()
Till(root).grid()
root.mainloop()