У меня проблемы с загрузкой интерфейса GUI из файла Pickle.
Мне удалось сделать то, что я хочу, но это не работает так, как я ожидал, и я не уверен, что это правильноway.
Это сокращенный пример основного графического интерфейса (вам не нужно читать его и понимать его глубину, это не главный вопрос):
tableRel = {}
master = Tk()
tableOrders = pickle.load(open(r"\\VIERNES7-3\Documentos c\sharedTableOrders.p","rb"))
count = 0
lOfKeys = tableOrders.keys()
numOfTables = len(lOfKeys)
for rowN in range((numOfTables /10)+1):
for colN in range(10):
if count == numOfTables:
break
tableN = (colN+1)+(10*(rowN))
f = Frame(master,height=600,width=200, bd=1, relief=SUNKEN)
f.grid(row=rowN, column=colN, pady=15, padx= 0)
Label(f, text="Mesa: " + str(lOfKeys[count])).pack(side = TOP)
scrollbar = Scrollbar(f, orient=VERTICAL)
listbox = Listbox(f, yscrollcommand=scrollbar.set, width=19)
tableRel[listbox] = lOfKeys[count]
scrollbar.config(command=listbox.yview)
scrollbar.pack(side=RIGHT, fill=Y)
listbox.pack(side=TOP)
listbox.bind("<Double-Button-1>", hideOrder)
listbox.bind("<Return>", hideOrder)
index = 0
listbox.delete(0, END)
for y in tableOrders[lOfKeys[count]]["orders"]:
#print tableOrders[x]
if (y["kitchen"] == "si" or y["category"] != "Bebidas") and y["ready"] == "no":
listbox.insert(END, y["name"])
#ordersByIndex[index] = y["name"]
if y["canceled"] == "si":
listbox.itemconfig(index, bg="red")
#tablesByIndex[index] = x
index += 1
count += 1
loadFile()
mainloop()
Теперьэто та часть, в которой я запутался, я неправильно понимаю концепцию mainloop()
, которая представляет собой бесконечный цикл.
Что именно он делает снова и снова?
Что меня беспокоит, так это то, что если я помещаю оператор печати в любое место файла, он не печатается снова и снова, поэтому он не выполняет повторно код файла.
Что я в основном, чтодобиться того, чтобы через некоторое время графический интерфейс перезагружался и, если в файле picke произошли изменения, обновился графический интерфейс.
Я смог добиться этого, поместив свой код в функцию (давайте назовем ееupdateGUI
) и занимаюсь master.after(5000, updateGUI)
.
чеЭто, кажется, не лучшее решение, потому что все меняется внезапно (выбранный параметр в списке и в свитке), но я думаю, что все это можно решить, запоминая состояние и навязывая его.
Но яИнтересно, есть ли какой-нибудь способ воспользоваться преимуществами mainloop и сделать графический интерфейс «обновленным», когда файл изменился (он не должен искать изменения в файле, он должен обновляться каждые 10 секунд или около того и перерисовыватьscreen.)
Я пробовал update
и update_idletasks
, но, похоже, никто не перезагружает рассол и не перерисовывает его на основании новой информации в рассоле.