Когда я нажимаю кнопку «вперед», появляется сообщение об ошибке «Индекс списка вне диапазона».
Привет, я работаю над этой проблемой уже несколько недель. В моем предыдущем посте кто-то предложил мне научиться правильно использовать лямбда-функции, что я и сделал. Я работал над несколькими более простыми версиями, чтобы понять, понимаю ли я концепцию, и теперь я перехожу к этой версии.
При настройке кода все будет работать правильно, кроме 1 маленькой ошибки. Я могу нажать кнопку «Рассчитать» на каждом блокноте, и он запустит метку и результат модели из Pulp. Я даже могу нажать кнопку «вперед», и она вычислит с помощью Pulp все результаты, полученные на ноутбуках, но на ней не будет отображаться ярлык «недели 2».
Я не знаю, где проблема, или какой код мне не хватает, или код, который мне нужно отредактировать.
Если кто-то может мне помочь, это было бы здорово, если бы я мог преодолеть этот горб и использовать ту же концепцию с моей более крупной программой.
import tkinter as tk
from tkinter import ttk
from functools import partial
import random
import pulp
class Application(tk.Tk):
def __init__(self):
super().__init__()
self.title("notbook my own try")
self.geometry("550x350")
self.config(bg="tan")
self.style = ttk.Style()
self.lnb = Sheets(self)
class Sheets(ttk.Notebook):
def __init__(self, parent):
parent.style.configure("down.TNotebook", tabposition="sw")
super().__init__(parent, style = "down.TNotebook")
self.pack(fill = tk.BOTH, expand =1)
self.parent = parent
self.week_index = ['Week 1', "Week 2"]
self.sheet_dict = {}
for num, week in enumerate(self.week_index, 1 ):
self.week = One_Weekly_Notebook(self, num)
self.week.pack()
self.add(self.week, text = week)
self.pack()
self.sheet_dict[week] = self.week
class One_Weekly_Notebook(ttk.Notebook):
def __init__(self, parent, index):
super().__init__(parent)
self.pack(fill = tk.BOTH, expand =1)
self.index = index
self.parent = parent
self.upper_tabs_dict = {}
self.labelVariable_list = []
self.label_list = []
self.Var_list = []
self.dropMenu_list = []
self.answer_list = []
self.model_list = []
self.optionList=["1", "2", "3", "4", "5", "6"]
self.optionList_random = []
self.object_final = Final(self)
tab1 = self.object_final
tab1.pack()
self.add(tab1, text = "Final")
self.pack()
self.upper_tabs_dict["Final"] = tab1
def pulp_process(self, button):
self.a_value = int(self.parent.sheet_dict[f'Week
{button}'].Var_list[0].get()) #1st dropdown value
self.b_value= int(self.parent.sheet_dict[f'Week
{button}'].Var_list[1].get()) #2nd dropdown value
# Instantiate our problem class
self.model = pulp.LpProblem("Profit maximising problem",
pulp.LpMaximize)
self.A = pulp.LpVariable('A', lowBound=0, cat='Integer')
self.B = pulp.LpVariable('B', lowBound=0, cat='Integer')
# Objective function
self.model += (self.a_value * self.A ) + (self.b_value *
self.B), "Profit"
# Constraints
self.model += 3 * self.A + 4 * self.B <= 3
self.model += 5 * self.A + 6 * self.B <= 6
self.model += 1.5 * self.A + 3 * self.B <= 2
# Solve the problem
self.model.solve()
self.answer= pulp.value(self.model.objective)
def see_label(self, button):
self.parent.sheet_dict[f"Week
{button}"].label_list[0].configure
(text = self.parent.sheet_dict[
f"Week {button}"].answer)
class Final(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
self.pack(fill=tk.BOTH, expand=1)
self.parent = parent
self.labels()
def labels(self):
self.label=tk.Label(self, bg="orange", fg="white")
self.label.pack()
self.parent.label_list.append(self.label)
self.random()
def random(self):
for i in range(2):
self.random = random.choice(self.parent.optionList)
self.parent.optionList_random.append(self.random)
self.dropdowns()
def dropdowns(self):
for i in range(2):
self.Var = tk.StringVar()
self.dropMenu=tk.OptionMenu(self, self.Var,
*self.parent.optionList)
self.dropMenu.config(width = 10)
self.dropMenu.pack(side = "left")
self.parent.Var_list.append(self.Var)
self.parent.dropMenu_list.append(self.dropMenu)
self.parent.Var_list[i].set
(self.parent.optionList_random[i])
self.buttons()
def buttons(self):
value = self.parent.index
self.button=tk.Button(self, text="calculate")
self.button.pack(side = "left")
self.button.configure(command= lambda button=value:
self.parent.pulp_process(button))
self.button = tk.Button(self, text="Forward", command =
self.forward)
self.button.pack ()
def forward(self):
self.parent.pulp_process(1)
self.parent.pulp_process(2)
if __name__ == '__main__':
Application().mainloop()
Когда я нажимаю кнопку «вперед», она должна показывать результаты целлюлозы на этикетке за все недели вместе.