Я обнаружил эту очень странную ошибку, которую не могу понять.
Прежде всего, внутри этой функции я открою:
tableOrders = pickle.load(open("\\\\VIERNES7-3\Documentos c\sharedTableOrders.p","rb"))
Если я сделаю pprint(tableOrders)
, я получу:
{1: {'blink': False,
'canceled': 'no',
'orders': [{u'availability': u'si',
u'canceled': u'no',
u'category': u'Minutas',
u'kitchen': u'si',
u'name': u'Hamburguesa al Plato',
u'parilla': u'no',
u'price': 60,
u'ready': u'no'},
{u'availability': u'si',
u'canceled': u'no',
u'category': u'Minutas',
u'kitchen': u'si',
u'name': u'Hamburguesa al Plato',
u'parilla': u'no',
u'price': 60,
u'ready': u'no'}]}}
Теперь я повторяю порядок таблиц мыслей следующим образом:
count = 0
for x in tableOrders[table]["orders"]:
if (x["kitchen"] == "si" or x["category"] == "Bebidas") and x["ready"] == "no":
print count
print int(event.widget.curselection()[0])
if count == int(event.widget.curselection()[0]):
x["ready"] = "si"
event.widget.delete(int(event.widget.curselection()[0]))
break
count += 1
int(event.widget.curselection()[0])
Будет выбранным элементом списка (кажется, что он работает правильно).
Странно то, что после того, как я это сделаю, у меня есть:
{1: {'blink': False,
'canceled': 'no',
'orders': [{u'availability': u'si',
u'canceled': u'no',
u'category': u'Minutas',
u'kitchen': u'si',
u'name': u'Hamburguesa al Plato',
u'parilla': u'no',
u'price': 60,
u'ready': u'si'}, <-------------- MARKED AS "si"
{u'availability': u'si',
u'canceled': u'no',
u'category': u'Minutas',
u'kitchen': u'si',
u'name': u'Hamburguesa al Plato',
u'parilla': u'no',
u'price': 60,
u'ready': u'si'}]}} <-------------- MARKED AS "si"
Так что оба «готовых» помечены как «си», и это не то, чего я ожидал, так как я сделал там перерыв.и оно должно изменить только свойство "ready", если count == выбранный элемент.
Я попытался также щелкнуть третий элемент списка (с индексом 2), и это то, что я получил отprint count
и print int(event.widget.curselection()[0])
:
0
2
1
2
2
2
Вот почему я запутался, поскольку только когда оба равны (2 == 2), код x["ready"] = "si"
должен выполняться.
Я не уверен, в чем проблема, я совершенно потерян, но, возможно, я неправильно понимаю цикл или разрыв, или я не понимаю, каквключите словарь и x["ready"] = "si"
сделает что-то другое, что я и ожидал.
На случай, если неясно, если я щелкну первый элемент списка (и, таким образом, int(event.widget.curselection()[0])
будетноль) Я хочу, чтобы первый элемент списка был x ["ready"] == "si", если я нажму на второй, второй элемент списка должен иметь значение "ready" для "si" и таквкл.
Я не помечал этот вопрос с помощью графического интерфейса пользователя, потому что я исключил вероятность того, что проблема существует, насколько мне известно.
РЕДАКТИРОВАТЬ:
Так как проблема, кажется, когда я использую рассол, вот более соответствующий код:
l = []
for item in sorted(jMenu["menu"]["items"]):
if item["category"] == selectedCategory:
l.append(item)
pedido = l[int(widget.curselection()[0])]
##pedido is something like this:
##pedido = {u'category': u'Bebidas', u'price': 40, u'name': u'Coca Cola', u'availability': u'si'}
Тогда я делаю:
tableOrders.addFood(activeTable, pedido)
addFood is
def addFood(self, table, food):
if not table in self.tableList.keys():
self.tableList[table] = {"orders":[food], "blink": False, "canceled": "no"}#el canceled hay que sacarlo?
else:
self.tableList[table]["orders"].append(food)
И мариновать я делаю:
def dumpTableOrders(self):
tableOrders = pickle.load(open("sharedTableOrders.p","rb"))
#pprint(self.tableList)
for food in sorted(self.tableList[activeTable]["orders"]):
if not activeTable in tableOrders.keys():
tableOrders[activeTable] = {"orders":[food], "blink": False, "canceled": "no"}#el canceled hay que sacarlo?
else:
tableOrders[activeTable]["orders"].append(food)
self.tableList = {}
#pprint(tableOrders)
pickle.dump(tableOrders, open(r'sharedTableOrders.p',"wb"))