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 (most recent call last):
File "D:\Users\SYSTEM H424\Desktop\Tanish\FUN\main.py", line 196, in
entry_stock_entry = ttk.Combobox(master = main_window, values = ["reliance", "tata motors", "itc", "mahindra"], textvariable = vvariable)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Users\SYSTEM H424\Desktop\Tanish\FUN\.venv\Lib\site-packages\ttkbootstrap\style.py", line 4941, in __init__
func(self, *args, **kwargs)
File "C:\Users\SYSTEM H424\AppData\Local\Programs\Python\Python312\Lib\tkinter\ttk.py", line 677, in __init__
Entry.__init__(self, master, "ttk::combobox", **kw)
File "D:\Users\SYSTEM H424\Desktop\Tanish\FUN\.venv\Lib\site-packages\ttkbootstrap\style.py", line 4960, in __init__
ttkstyle = Bootstyle.update_ttk_widget_style(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Users\SYSTEM H424\Desktop\Tanish\FUN\.venv\Lib\site-packages\ttkbootstrap\style.py", line 5050, in update_ttk_widget_style
builder_method(builder, widget_color)
File "D:\Users\SYSTEM H424\Desktop\Tanish\FUN\.venv\Lib\site-packages\ttkbootstrap\style.py", line 1215, in create_combobox_style
arrowsize=self.scale_size(12),
^^^^^^^^^^^^^^^^^^^
File "D:\Users\SYSTEM H424\Desktop\Tanish\FUN\.venv\Lib\site-packages\ttkbootstrap\style.py", line 1116, in scale_size
winsys = self.style.master.tk.call("tk", "windowingsystem")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_tkinter.TclError: can't invoke "tk" command: application has been destroyed
Теперь я беспомощен, примерно через 3 часа, я не понимаю, почему это срабатывает, потому что как будто создается графический интерфейс. Также я пытался его отладить, добавлял операторы печати и даже использовал .protocall(), но ничего не помогает, даже в чате gpt говорит, что с вашим кодом все в порядке, а проблема, Эми, кроется в самой библиотеке, он предлагает мне пересобрать все приложение. Я новичок, и восстановление его звучит слишком скучно и беспокойно, поэтому, если возможно, кто-нибудь может решить мою проблему. Раньше у меня был интерфейс входа и входа в систему, которые могли переключаться между собой, но я отказался от него в надежде устранить ошибку
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")
[/code] поэтому не сосредотачивайтесь на файлах json или csv, когда я запускаю свой основной код, я вхожу в систему, и он успешно входит в систему, я жестко запрограммировал файл csv на данный момент для удобства, поэтому, когда я запускаю код, он успешно открывает журнал в графическом интерфейсе, после успешного входа в систему окно уничтожается, и я ожидаю, что после него запустится код, но возникает эта ошибка [code]Traceback (most recent call last): File "D:\Users\SYSTEM H424\Desktop\Tanish\FUN\main.py", line 196, in entry_stock_entry = ttk.Combobox(master = main_window, values = ["reliance", "tata motors", "itc", "mahindra"], textvariable = vvariable) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Users\SYSTEM H424\Desktop\Tanish\FUN\.venv\Lib\site-packages\ttkbootstrap\style.py", line 4941, in __init__ func(self, *args, **kwargs) File "C:\Users\SYSTEM H424\AppData\Local\Programs\Python\Python312\Lib\tkinter\ttk.py", line 677, in __init__ Entry.__init__(self, master, "ttk::combobox", **kw) File "D:\Users\SYSTEM H424\Desktop\Tanish\FUN\.venv\Lib\site-packages\ttkbootstrap\style.py", line 4960, in __init__ ttkstyle = Bootstyle.update_ttk_widget_style( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Users\SYSTEM H424\Desktop\Tanish\FUN\.venv\Lib\site-packages\ttkbootstrap\style.py", line 5050, in update_ttk_widget_style builder_method(builder, widget_color) File "D:\Users\SYSTEM H424\Desktop\Tanish\FUN\.venv\Lib\site-packages\ttkbootstrap\style.py", line 1215, in create_combobox_style arrowsize=self.scale_size(12), ^^^^^^^^^^^^^^^^^^^ File "D:\Users\SYSTEM H424\Desktop\Tanish\FUN\.venv\Lib\site-packages\ttkbootstrap\style.py", line 1116, in scale_size winsys = self.style.master.tk.call("tk", "windowingsystem") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _tkinter.TclError: can't invoke "tk" command: application has been destroyed [/code] Теперь я беспомощен, примерно через 3 часа, я не понимаю, почему это срабатывает, потому что как будто создается графический интерфейс. Также я пытался его отладить, добавлял операторы печати и даже использовал .protocall(), но ничего не помогает, даже в чате gpt говорит, что с вашим кодом все в порядке, а проблема, Эми, кроется в самой библиотеке, он предлагает мне пересобрать все приложение. Я новичок, и восстановление его звучит слишком скучно и беспокойно, поэтому, если возможно, кто-нибудь может решить мою проблему. Раньше у меня был интерфейс входа и входа в систему, которые могли переключаться между собой, но я отказался от него в надежде устранить ошибку