Anonymous
Ошибка выдачи комбобокса, хотя главное окно существует
Сообщение
Anonymous » 06 янв 2025, 05:04
вот мой основной код
Код: Выделить всё
import ttkbootstrap as ttk
from random import choice, choices
import csv
from Login import Login
login = Login()
login.login_gui()
user = login.authenticated_user
if user:
with open('tanishStock_data.csv') as sheet:
reader = list(csv.DictReader(sheet))
day = int(reader[-1]['Day'])
cash = float(reader[-1]['Cash'])
stocks = {"reliance":float(reader[-4]['Price']), "tata motors":float(reader[-3]['Price']), "itc":float(reader[-2]['Price']), "mahindra":float(reader[-1]['Price'])}
labels = {} #stores stock_name:it's price_label (refer to line 108)
holdings = {} #stock : {quantity, price, value}
def update_label(label, text, fg=None):
label.configure(text=text, foreground = fg)
portfolio_window = None
def bull_run(stock):
inc_or_dec = choices([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], weights=[20, 30, 10, 8, 7, 4, 3, 2, 2, 1])[0]
stocks[stock] = stocks[stock] * inc_or_dec / 100 + stocks[stock]
def bear_run(stock):
inc_or_dec = choices([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], weights=[20, 30, 10, 8, 7, 4, 3, 2, 2, 1])[0]
stocks[stock] = stocks[stock] - stocks[stock] * inc_or_dec / 100
def simulate_stocks():
for stock in stocks:
randomizer = choice(["plus", "minus"])
if randomizer == "plus":
bull_run(stock)
elif randomizer == "minus":
bear_run(stock)
else:
print("error encountered")
break
update_prices()
main_window.after(5000, simulate_stocks)
def update_prices():
for stock_name, label in labels.items():
price = float(label.cget("text")) #gets the price out of the price_label
if price > stocks[stock_name]:
update_label(label, f"{stocks[stock_name]:.2f}", fg = "red")
else:
update_label(label, f"{stocks[stock_name]:.2f}", fg = "#228B22")
def buy_stock():
global cash
stock = vvariable.get().strip().lower()
try:
quantity = int(entry_quantity_price.get())
except ValueError:
update_label(quantity_warning, "*Enter a valid quantity")
return
if stock in stocks:
total_cost = quantity * stocks[stock]
if total_cost > cash:
update_label(quantity_warning, "*Not enough cash")
elif quantity 10000:
update_label(quantity_warning,"*Quantity should be between 1 and 10000")
else:
update_label(quantity_warning, "")
update_label(stock_warning, "")
if stock not in holdings:
holdings[stock] = {"quantity": 0, "price": 0, "value": 0}
holdings[stock]["price"] = (stocks[stock] * quantity + holdings[stock]["price"] * holdings[stock]["quantity"])/(quantity + holdings[stock]["quantity"])
holdings[stock]["quantity"] += quantity
holdings[stock]["value"] = holdings[stock]["quantity"] * holdings[stock]["price"]
cash -= total_cost
update_label(cash_display, f"CASH: {cash:.2f}")
else:
update_label(stock_warning, "*No such stock exists")
def sell_stock():
global cash
stock = vvariable.get().strip().lower()
try:
quantity = int(entry_quantity_price.get())
except ValueError:
update_label(quantity_warning, "*Enter a valid quantity")
return
if stock in holdings:
if quantity holdings[stock]["quantity"]:
update_label(quantity_warning, "*Invalid quantity")
else:
update_label(quantity_warning, "")
update_label(stock_warning, "")
holdings[stock]["quantity"] -= quantity
sell_value = quantity * stocks[stock]
cash += sell_value
update_label(cash_display, f"CASH: {cash:.2f}")
holdings[stock]["value"] = holdings[stock]["quantity"] * holdings[stock]["price"]
if holdings[stock]["quantity"] == 0:
del holdings[stock]
else:
stock_warning.config(text="*You don't own this stock")
def stock_data_writer(real_day): # writes stock data in csv file
with open('tanishStock_data.csv', mode ='a', newline ='') as sheet:
writer = csv.DictWriter(sheet, fieldnames = ['Day', 'Stock', 'Price', 'Cash'])
for stock in stocks:
writer.writerow({'Day' : real_day, 'Stock' : stock, 'Price' : f'{stocks[stock]:.2f}', 'Cash' : f'{cash:.2f}'})
def day_system(): #manages day system in the stock simulator
global day
day += 1
stock_data_writer(day)
update_label(day_display, text = f"DAY : {day}", fg = "red")
main_window.after(20000, lambda: day_system())
def clickable_stocks(stockname, stockprice):
entry_stock_entry.delete(0, ttk.END)
entry_quantity_price.delete(0, ttk.END)
entry_stock_entry.insert(0, stockname)
entry_quantity_price.insert(0, stockprice)
def show_portfolio():
global portfolio_window
# Destroy the existing portfolio window if it exists
if portfolio_window:
portfolio_window.destroy()
# Create new portfolio window
portfolio_window = ttk.Toplevel(main_window)
portfolio_window.title("PORTFOLIO")
portfolio_window.geometry("420x300")
portfolio_window.resizable(False, False)
# Create canvas and scrollbar
canvas = ttk.Canvas(portfolio_window)
scrollbar = ttk.Scrollbar(portfolio_window, orient="vertical", command=canvas.yview)
canvas.configure(yscrollcommand=scrollbar.set)
# Create a frame inside the canvas
canvas_frame = ttk.Frame(canvas)
canvas.create_window((0, 0), window=canvas_frame, anchor="nw")
# Pack the scrollbar and canvas
scrollbar.pack(side="right", fill="y")
canvas.pack(side="left", fill="both", expand=True)
def update_portfolio_window():
# Clear the frame before updating
for widget in canvas_frame.winfo_children():
widget.destroy()
row_num = 2
cash_label = ttk.Label(canvas_frame, text=f"CASH: {cash:.2f}", font=("arial", 13, "bold"),foreground="green")
cash_label.grid(row=0, column=0, padx=10, pady=10, sticky="w")
upper_divider = ttk.Label(canvas_frame, text="_" * 80)
upper_divider.grid(row=1, column=0, columnspan=2, padx=10)
if holdings:
for stock, data in holdings.items():
stock_name = ttk.Label(canvas_frame, text=stock.title(), font=("arial", 15))
purchase_data = ttk.Label(canvas_frame,
text=f"Qty: {data['quantity']} | Price: {data['price']:.2f}",
font=("arial", 8))
current_value = ttk.Label(canvas_frame, text=f"Value: {data['value']:.2f}", font=("arial", 13),foreground="green")
stock_name.grid(row=row_num, column=0, padx=10, pady=5, sticky="w")
purchase_data.grid(row=row_num + 1, column=0, padx=10, sticky="w")
current_value.grid(row=row_num + 1, column=1, padx=10, sticky="e")
row_num += 3
else:
no_holdings_label = ttk.Label(canvas_frame, text="No holdings yet.", font=("arial", 12))
no_holdings_label.grid(row=row_num, column=0, columnspan=2, pady=50)
close_button = ttk.Button(canvas_frame, text="Close", command=portfolio_window.destroy)
close_button.grid(row=row_num + 1, column=1, sticky="e", padx=10, pady=10)
canvas_frame.update_idletasks()
canvas.config(scrollregion=canvas.bbox("all"))
update_portfolio_window()
main_window = ttk.Window(themename = "darkly")
def on_destroy():
print("Main window is being destroyed.")
main_window.destroy()
main_window.protocol("WM_DELETE_WINDOW", on_destroy)
main_window.geometry("600x500")
main_window.title("Tanish Stock Exchange")
vvariable = ttk.StringVar()
header = ttk.Label(main_window, text = "TSE", font=("arial", 20), foreground="blue")
header.pack()
day_display = ttk.Label(main_window, text = f"DAY : {day}", font = ("arial", 15), foreground='red')
day_display.place(x = 260, y = 300)
y_position = 80
stock_entry = ttk.Label(main_window, text ="STOCK: ", font=("arial", 15, "bold"))
stock_entry.place(x = 300, y = 80)
stock_warning = ttk.Label(main_window, text = "", font=("arial", 7), foreground="red")
stock_warning.place(x = 400, y=110)
stock_quantity = ttk.Label(main_window, text ="quantity: ", font=("arial", 15, "bold"))
stock_quantity.place(x = 300, y = 120)
quantity_warning = ttk.Label(main_window, text = "", font=("arial", 7), foreground="red")
quantity_warning.place(x = 400, y=150)
entry_stock_entry = ttk.Combobox(master = main_window, values = ["reliance", "tata motors", "itc", "mahindra"], textvariable = vvariable)
entry_stock_entry.place(x = 400, y = 83)
entry_quantity_price = ttk.Entry(main_window)
entry_quantity_price.place(x = 400, y = 125)
buy = ttk.Button(main_window, text="BUY", style="success", width=7, padding=(20, 10), command = buy_stock)
buy.place(x = 470, y = 170)
sell = ttk.Button(main_window, text="SELL",style="danger", width=7, padding=(20, 10), command = sell_stock)
sell.place(x = 370, y = 170)
portfolio = ttk.Button(main_window, text="Portfolio",style = "primary",padding = (20, 10),command=show_portfolio)
portfolio.place(x=20,y=20)
cash_display = ttk.Label(main_window, text = f"CASH: {cash}", font=("arial", 13, "bold"),foreground="blue")
cash_display.place(x=410, y=30)
for stock in stocks:
stock_label = ttk.Label(main_window, text=f"{stock.title()}:", font=("arial", 15, "bold"), foreground="#4682B4")
stock_label.place(x=20, y=y_position)
price_label = ttk.Label(main_window, text=f"{stocks[stock]}", font=("arial", 15), foreground="green")
price_label.place(x=150, y=y_position)
labels[stock] = price_label
stock_label.bind("", lambda event, stockname=stock: clickable_stocks(stockname, round(cash//float(labels[stockname].cget("text")))))
y_position += 40
simulate_stocks()
day_system()
main_window.mainloop()
вам может быть интересно, что такое класс входа, вот он:
Код: Выделить всё
import ttkbootstrap as ttk
import json
import bcrypt
import os
class Login:
def __init__(self, username=None, password=None):
self.username = username
self.password = password
self.authenticated_user = False
def __str__(self):
return "Login class made for login purposes in every project."
def display_message(self, message_label, message, color="red"):
message_label.config(text=message, foreground=color)
def authenticate_user(self, username, password, window):
self.username = username.get().strip().lower()
self.password = password.get().strip().encode("utf-8")
self.display_message(self.login_message_label, "")
try:
with open('User_data.json', 'r+') as user_data:
data = json.load(user_data)
for user in data:
if user["username"] == self.username:
if bcrypt.checkpw(self.password, user["password"].encode("utf-8")):
self.display_message(self.login_message_label, "Login successful!", "green")
window.destroy()
self.authenticated_user = True
return
else:
self.display_message(self.login_message_label, "Invalid password.")
return
salt = bcrypt.gensalt()
hashed_pass = bcrypt.hashpw(self.password, salt).decode("utf-8")
new_entry = {"username": self.username, "password": hashed_pass}
data.append(new_entry)
user_data.seek(0)
json.dump(data, user_data, indent=4)
user_data.truncate()
self.create_user_stock_file(self.username)
self.display_message(self.login_message_label, "User added successfully!", "green")
window.destroy()
self.authenticated_user = True
except FileNotFoundError:
self.display_message(self.login_message_label, "Server error")
except json.JSONDecodeError:
self.display_message(self.login_message_label, "Server error")
def create_user_stock_file(self, username):
filename = f"{username}stock.csv"
if not os.path.exists(filename):
with open(filename, 'w') as file:
file.write("StockName,Quantity,Price\n")
def login_gui(self):
login_window = ttk.Window(themename="darkly")
login_window.title("TSA Login")
login_window.geometry("400x250")
ttk.Label(login_window, text="Welcome to TSA", font=("arial", 17, "bold")).pack()
ttk.Label(login_window, text="Username: ", font=("arial", 12)).place(x=20, y=50)
login_username_entry = ttk.Entry(login_window, width=30)
login_username_entry.place(x=120, y=47)
ttk.Label(login_window, text="Password: ", font=("arial", 12)).place(x=20, y=100)
login_password_entry = ttk.Entry(login_window, show="*", width=30)
login_password_entry.place(x=120, y=97)
self.login_message_label = ttk.Label(login_window, text="", font=("arial", 10))
self.login_message_label.place(x=20, y=130)
ttk.Button(login_window, text="Login", style="primary-outline", width=13, command=lambda: self.authenticate_user(login_username_entry, login_password_entry, login_window)).place(x=160, y=160)
login_window.mainloop()
поэтому не сосредотачивайтесь на файлах json или csv, когда я запускаю свой основной код, я вхожу в систему, и он успешно входит в систему, я жестко запрограммировал файл csv на данный момент для удобства, поэтому, когда я запускаю код, он успешно открывает журнал в графическом интерфейсе, после успешного входа в систему окно уничтожается, и я ожидаю, что после него запустится код, но возникает эта ошибка
Traceback (последний вызов последний):
Файл "D:\Users\SYSTEM H424\Desktop\Tanish\FUN\main.py", строка 196, в
entry_stock_entry = ttk.Combobox(master = main_window,values = [" Reliance", "Tata Motors", "itc", "Mahindra"], textvariable = vvariable)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^
Файл «D:\Users\SYSTEM H424\Desktop\Tanish\FUN.venv\Lib\site-packages\ttkbootstrap\style.py», строка 4941, в
init
func (self, *args, **kwargs)
Файл "C:\Users\SYSTEM H424\AppData\Local\Programs\Python\Python312\Lib\tkinter\ttk.py", строка 677, в
init
Entry.
init (self, master, "ttk::combobox", **kw)
Файл "D:\Users\SYSTEM H424\Desktop\Tanish\FUN.venv\Lib\site-packages\ttkbootstrap\style.py", строка 4960, в
init
ttkstyle = Bootstyle.update_ttk_widget_style(
^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Файл «D:\Users\SYSTEM H424\Desktop\Tanish\FUN.venv\Lib\site-packages\ttkbootstrap\style.py», строка 5050, в update_ttk_widget_style
builder_method(builder, widget_color)
Файл "D:\Users\SYSTEM H424\Desktop\Tanish\FUN.venv\Lib\site-packages\ttkbootstrap\style.py", строка 1215, в create_combobox_style
arrowsize=self.scale_size(12),
^^^^^ ^^^^^^^^^^^^^^
Файл "D:\Users\SYSTEM H424\Desktop\Tanish\FUN.venv\Lib\site-packages\ttkbootstrap\style.py", строка 1116, в масштабе_размера
winsys = self.style.master.tk.call("tk", "windowingsystem ")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^
_tkinter.TclError: невозможно вызвать команду «tk»: приложение было уничтожено
Я беспомощен сейчас, примерно через 3 часа я не понимаю, почему это срабатывает, потому что типа графический интерфейс создан. Также я пытался его отладить, добавлял операторы печати и даже использовал .protocall(), но ничего не помогает, даже в чате gpt говорит, что с вашим кодом все в порядке, а проблема, Эми, кроется в самой библиотеке, он предлагает мне пересобрать все приложение. Я новичок, и восстановление его звучит слишком скучно и беспокойно, поэтому, если возможно, кто-нибудь может решить мою проблему. Раньше у меня был интерфейс входа и входа в систему, которые могли переключаться между собой, но я отказался от него в надежде устранить ошибку
Подробнее здесь:
https://stackoverflow.com/questions/793 ... dow-exists
1736129069
Anonymous
вот мой основной код [code]import ttkbootstrap as ttk from random import choice, choices import csv from Login import Login login = Login() login.login_gui() user = login.authenticated_user if user: with open('tanishStock_data.csv') as sheet: reader = list(csv.DictReader(sheet)) day = int(reader[-1]['Day']) cash = float(reader[-1]['Cash']) stocks = {"reliance":float(reader[-4]['Price']), "tata motors":float(reader[-3]['Price']), "itc":float(reader[-2]['Price']), "mahindra":float(reader[-1]['Price'])} labels = {} #stores stock_name:it's price_label (refer to line 108) holdings = {} #stock : {quantity, price, value} def update_label(label, text, fg=None): label.configure(text=text, foreground = fg) portfolio_window = None def bull_run(stock): inc_or_dec = choices([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], weights=[20, 30, 10, 8, 7, 4, 3, 2, 2, 1])[0] stocks[stock] = stocks[stock] * inc_or_dec / 100 + stocks[stock] def bear_run(stock): inc_or_dec = choices([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], weights=[20, 30, 10, 8, 7, 4, 3, 2, 2, 1])[0] stocks[stock] = stocks[stock] - stocks[stock] * inc_or_dec / 100 def simulate_stocks(): for stock in stocks: randomizer = choice(["plus", "minus"]) if randomizer == "plus": bull_run(stock) elif randomizer == "minus": bear_run(stock) else: print("error encountered") break update_prices() main_window.after(5000, simulate_stocks) def update_prices(): for stock_name, label in labels.items(): price = float(label.cget("text")) #gets the price out of the price_label if price > stocks[stock_name]: update_label(label, f"{stocks[stock_name]:.2f}", fg = "red") else: update_label(label, f"{stocks[stock_name]:.2f}", fg = "#228B22") def buy_stock(): global cash stock = vvariable.get().strip().lower() try: quantity = int(entry_quantity_price.get()) except ValueError: update_label(quantity_warning, "*Enter a valid quantity") return if stock in stocks: total_cost = quantity * stocks[stock] if total_cost > cash: update_label(quantity_warning, "*Not enough cash") elif quantity 10000: update_label(quantity_warning,"*Quantity should be between 1 and 10000") else: update_label(quantity_warning, "") update_label(stock_warning, "") if stock not in holdings: holdings[stock] = {"quantity": 0, "price": 0, "value": 0} holdings[stock]["price"] = (stocks[stock] * quantity + holdings[stock]["price"] * holdings[stock]["quantity"])/(quantity + holdings[stock]["quantity"]) holdings[stock]["quantity"] += quantity holdings[stock]["value"] = holdings[stock]["quantity"] * holdings[stock]["price"] cash -= total_cost update_label(cash_display, f"CASH: {cash:.2f}") else: update_label(stock_warning, "*No such stock exists") def sell_stock(): global cash stock = vvariable.get().strip().lower() try: quantity = int(entry_quantity_price.get()) except ValueError: update_label(quantity_warning, "*Enter a valid quantity") return if stock in holdings: if quantity holdings[stock]["quantity"]: update_label(quantity_warning, "*Invalid quantity") else: update_label(quantity_warning, "") update_label(stock_warning, "") holdings[stock]["quantity"] -= quantity sell_value = quantity * stocks[stock] cash += sell_value update_label(cash_display, f"CASH: {cash:.2f}") holdings[stock]["value"] = holdings[stock]["quantity"] * holdings[stock]["price"] if holdings[stock]["quantity"] == 0: del holdings[stock] else: stock_warning.config(text="*You don't own this stock") def stock_data_writer(real_day): # writes stock data in csv file with open('tanishStock_data.csv', mode ='a', newline ='') as sheet: writer = csv.DictWriter(sheet, fieldnames = ['Day', 'Stock', 'Price', 'Cash']) for stock in stocks: writer.writerow({'Day' : real_day, 'Stock' : stock, 'Price' : f'{stocks[stock]:.2f}', 'Cash' : f'{cash:.2f}'}) def day_system(): #manages day system in the stock simulator global day day += 1 stock_data_writer(day) update_label(day_display, text = f"DAY : {day}", fg = "red") main_window.after(20000, lambda: day_system()) def clickable_stocks(stockname, stockprice): entry_stock_entry.delete(0, ttk.END) entry_quantity_price.delete(0, ttk.END) entry_stock_entry.insert(0, stockname) entry_quantity_price.insert(0, stockprice) def show_portfolio(): global portfolio_window # Destroy the existing portfolio window if it exists if portfolio_window: portfolio_window.destroy() # Create new portfolio window portfolio_window = ttk.Toplevel(main_window) portfolio_window.title("PORTFOLIO") portfolio_window.geometry("420x300") portfolio_window.resizable(False, False) # Create canvas and scrollbar canvas = ttk.Canvas(portfolio_window) scrollbar = ttk.Scrollbar(portfolio_window, orient="vertical", command=canvas.yview) canvas.configure(yscrollcommand=scrollbar.set) # Create a frame inside the canvas canvas_frame = ttk.Frame(canvas) canvas.create_window((0, 0), window=canvas_frame, anchor="nw") # Pack the scrollbar and canvas scrollbar.pack(side="right", fill="y") canvas.pack(side="left", fill="both", expand=True) def update_portfolio_window(): # Clear the frame before updating for widget in canvas_frame.winfo_children(): widget.destroy() row_num = 2 cash_label = ttk.Label(canvas_frame, text=f"CASH: {cash:.2f}", font=("arial", 13, "bold"),foreground="green") cash_label.grid(row=0, column=0, padx=10, pady=10, sticky="w") upper_divider = ttk.Label(canvas_frame, text="_" * 80) upper_divider.grid(row=1, column=0, columnspan=2, padx=10) if holdings: for stock, data in holdings.items(): stock_name = ttk.Label(canvas_frame, text=stock.title(), font=("arial", 15)) purchase_data = ttk.Label(canvas_frame, text=f"Qty: {data['quantity']} | Price: {data['price']:.2f}", font=("arial", 8)) current_value = ttk.Label(canvas_frame, text=f"Value: {data['value']:.2f}", font=("arial", 13),foreground="green") stock_name.grid(row=row_num, column=0, padx=10, pady=5, sticky="w") purchase_data.grid(row=row_num + 1, column=0, padx=10, sticky="w") current_value.grid(row=row_num + 1, column=1, padx=10, sticky="e") row_num += 3 else: no_holdings_label = ttk.Label(canvas_frame, text="No holdings yet.", font=("arial", 12)) no_holdings_label.grid(row=row_num, column=0, columnspan=2, pady=50) close_button = ttk.Button(canvas_frame, text="Close", command=portfolio_window.destroy) close_button.grid(row=row_num + 1, column=1, sticky="e", padx=10, pady=10) canvas_frame.update_idletasks() canvas.config(scrollregion=canvas.bbox("all")) update_portfolio_window() main_window = ttk.Window(themename = "darkly") def on_destroy(): print("Main window is being destroyed.") main_window.destroy() main_window.protocol("WM_DELETE_WINDOW", on_destroy) main_window.geometry("600x500") main_window.title("Tanish Stock Exchange") vvariable = ttk.StringVar() header = ttk.Label(main_window, text = "TSE", font=("arial", 20), foreground="blue") header.pack() day_display = ttk.Label(main_window, text = f"DAY : {day}", font = ("arial", 15), foreground='red') day_display.place(x = 260, y = 300) y_position = 80 stock_entry = ttk.Label(main_window, text ="STOCK: ", font=("arial", 15, "bold")) stock_entry.place(x = 300, y = 80) stock_warning = ttk.Label(main_window, text = "", font=("arial", 7), foreground="red") stock_warning.place(x = 400, y=110) stock_quantity = ttk.Label(main_window, text ="quantity: ", font=("arial", 15, "bold")) stock_quantity.place(x = 300, y = 120) quantity_warning = ttk.Label(main_window, text = "", font=("arial", 7), foreground="red") quantity_warning.place(x = 400, y=150) entry_stock_entry = ttk.Combobox(master = main_window, values = ["reliance", "tata motors", "itc", "mahindra"], textvariable = vvariable) entry_stock_entry.place(x = 400, y = 83) entry_quantity_price = ttk.Entry(main_window) entry_quantity_price.place(x = 400, y = 125) buy = ttk.Button(main_window, text="BUY", style="success", width=7, padding=(20, 10), command = buy_stock) buy.place(x = 470, y = 170) sell = ttk.Button(main_window, text="SELL",style="danger", width=7, padding=(20, 10), command = sell_stock) sell.place(x = 370, y = 170) portfolio = ttk.Button(main_window, text="Portfolio",style = "primary",padding = (20, 10),command=show_portfolio) portfolio.place(x=20,y=20) cash_display = ttk.Label(main_window, text = f"CASH: {cash}", font=("arial", 13, "bold"),foreground="blue") cash_display.place(x=410, y=30) for stock in stocks: stock_label = ttk.Label(main_window, text=f"{stock.title()}:", font=("arial", 15, "bold"), foreground="#4682B4") stock_label.place(x=20, y=y_position) price_label = ttk.Label(main_window, text=f"{stocks[stock]}", font=("arial", 15), foreground="green") price_label.place(x=150, y=y_position) labels[stock] = price_label stock_label.bind("", lambda event, stockname=stock: clickable_stocks(stockname, round(cash//float(labels[stockname].cget("text"))))) y_position += 40 simulate_stocks() day_system() main_window.mainloop() [/code] вам может быть интересно, что такое класс входа, вот он: [code]import ttkbootstrap as ttk import json import bcrypt import os class Login: def __init__(self, username=None, password=None): self.username = username self.password = password self.authenticated_user = False def __str__(self): return "Login class made for login purposes in every project." def display_message(self, message_label, message, color="red"): message_label.config(text=message, foreground=color) def authenticate_user(self, username, password, window): self.username = username.get().strip().lower() self.password = password.get().strip().encode("utf-8") self.display_message(self.login_message_label, "") try: with open('User_data.json', 'r+') as user_data: data = json.load(user_data) for user in data: if user["username"] == self.username: if bcrypt.checkpw(self.password, user["password"].encode("utf-8")): self.display_message(self.login_message_label, "Login successful!", "green") window.destroy() self.authenticated_user = True return else: self.display_message(self.login_message_label, "Invalid password.") return salt = bcrypt.gensalt() hashed_pass = bcrypt.hashpw(self.password, salt).decode("utf-8") new_entry = {"username": self.username, "password": hashed_pass} data.append(new_entry) user_data.seek(0) json.dump(data, user_data, indent=4) user_data.truncate() self.create_user_stock_file(self.username) self.display_message(self.login_message_label, "User added successfully!", "green") window.destroy() self.authenticated_user = True except FileNotFoundError: self.display_message(self.login_message_label, "Server error") except json.JSONDecodeError: self.display_message(self.login_message_label, "Server error") def create_user_stock_file(self, username): filename = f"{username}stock.csv" if not os.path.exists(filename): with open(filename, 'w') as file: file.write("StockName,Quantity,Price\n") def login_gui(self): login_window = ttk.Window(themename="darkly") login_window.title("TSA Login") login_window.geometry("400x250") ttk.Label(login_window, text="Welcome to TSA", font=("arial", 17, "bold")).pack() ttk.Label(login_window, text="Username: ", font=("arial", 12)).place(x=20, y=50) login_username_entry = ttk.Entry(login_window, width=30) login_username_entry.place(x=120, y=47) ttk.Label(login_window, text="Password: ", font=("arial", 12)).place(x=20, y=100) login_password_entry = ttk.Entry(login_window, show="*", width=30) login_password_entry.place(x=120, y=97) self.login_message_label = ttk.Label(login_window, text="", font=("arial", 10)) self.login_message_label.place(x=20, y=130) ttk.Button(login_window, text="Login", style="primary-outline", width=13, command=lambda: self.authenticate_user(login_username_entry, login_password_entry, login_window)).place(x=160, y=160) login_window.mainloop() [/code] поэтому не сосредотачивайтесь на файлах json или csv, когда я запускаю свой основной код, я вхожу в систему, и он успешно входит в систему, я жестко запрограммировал файл csv на данный момент для удобства, поэтому, когда я запускаю код, он успешно открывает журнал в графическом интерфейсе, после успешного входа в систему окно уничтожается, и я ожидаю, что после него запустится код, но возникает эта ошибка Traceback (последний вызов последний): Файл "D:\Users\SYSTEM H424\Desktop\Tanish\FUN\main.py", строка 196, в entry_stock_entry = ttk.Combobox(master = main_window,values = [" Reliance", "Tata Motors", "itc", "Mahindra"], textvariable = vvariable) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ Файл «D:\Users\SYSTEM H424\Desktop\Tanish\FUN.venv\Lib\site-packages\ttkbootstrap\style.py», строка 4941, в [b]init[/b] func (self, *args, **kwargs) Файл "C:\Users\SYSTEM H424\AppData\Local\Programs\Python\Python312\Lib\tkinter\ttk.py", строка 677, в [b]init[/b] Entry.[b]init[/b](self, master, "ttk::combobox", **kw) Файл "D:\Users\SYSTEM H424\Desktop\Tanish\FUN.venv\Lib\site-packages\ttkbootstrap\style.py", строка 4960, в [b]init[/b] ttkstyle = Bootstyle.update_ttk_widget_style( ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл «D:\Users\SYSTEM H424\Desktop\Tanish\FUN.venv\Lib\site-packages\ttkbootstrap\style.py», строка 5050, в update_ttk_widget_style builder_method(builder, widget_color) Файл "D:\Users\SYSTEM H424\Desktop\Tanish\FUN.venv\Lib\site-packages\ttkbootstrap\style.py", строка 1215, в create_combobox_style arrowsize=self.scale_size(12), ^^^^^ ^^^^^^^^^^^^^^ Файл "D:\Users\SYSTEM H424\Desktop\Tanish\FUN.venv\Lib\site-packages\ttkbootstrap\style.py", строка 1116, в масштабе_размера winsys = self.style.master.tk.call("tk", "windowingsystem ") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ _tkinter.TclError: невозможно вызвать команду «tk»: приложение было уничтожено Я беспомощен сейчас, примерно через 3 часа я не понимаю, почему это срабатывает, потому что типа графический интерфейс создан. Также я пытался его отладить, добавлял операторы печати и даже использовал .protocall(), но ничего не помогает, даже в чате gpt говорит, что с вашим кодом все в порядке, а проблема, Эми, кроется в самой библиотеке, он предлагает мне пересобрать все приложение. Я новичок, и восстановление его звучит слишком скучно и беспокойно, поэтому, если возможно, кто-нибудь может решить мою проблему. Раньше у меня был интерфейс входа и входа в систему, которые могли переключаться между собой, но я отказался от него в надежде устранить ошибку Подробнее здесь: [url]https://stackoverflow.com/questions/79331913/combobox-throwing-error-even-though-the-mainwindow-exists[/url]