使用python Tkinter,sqlite3刷新内容时出现问题



所以我正在构建一个包含5个页面(登录、注册、欢迎、text_writeting、archived_text(的笔记应用程序该应用程序可以接收多个用户,每个用户都有自己的笔记存储在数据库中问题是,当我与一个用户断开连接,并想切换到另一个用户时,它会保留旧用户信息,而不刷新和显示新用户信息,只有当我关闭应用程序并重新打开它时才会显示加->当我检查数据库时,一切都很顺利,日期确实更新了,问题只是在GUI 中

class main_app(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side="top", fill="both", expand = True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
data_baseconnect=sqlite3.connect('NOTES_DB.db')
data_cursor=data_baseconnect.cursor()
data_cursor.execute('SELECT current_state from LOGINS_STATE')
data_baseconnect.commit()
Current_person_state = data_cursor.fetchall()
for frame_class in (Login_page,Register_page, Welcoming_page,notes_page1,notes_page2):
frame = frame_class(container, self)
self.frames[frame_class] = frame
frame.grid(row=0, column=0, sticky="nsew")
if Current_person_state[0][0]==0: 
self.show_frame(Login_page)
else :
self.update()
self.show_frame(Welcoming_page)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
#Login page
class Login_page(tk.Frame):
def __init__(self, parent, controller):
def user_connect() :
#Login_page_User_name_Entry is an entry when the user type the new person he want to connect
#through // this user is already in the data base 
global Current_userV2
database_connection=sqlite3.connect('NOTES_DB.db')
data_currsor=database_connection.cursor()
Login_page_Error_connect.config(text='')
Current_userV2=str(Login_page_User_name_Entry.get())
data_currsor.execute("UPDATE LOGINS_STATE SET current_user=(?),current_state=(?)",((str(Login_page_User_name_Entry.get())),('1')))
database_connection.commit()
controller.show_frame(Welcoming_page)            
tk.Frame.__init__(self,parent,bg='#EDD01C')
Login_page_connect_button=Button(Login_page_frame,text="Connect",width=20,height=2,bg='green',command=user_connect)
Login_page_connect_button.place(x=80,y=300)

.....
class Welcoming_page(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent,bg='#EDD01C')
def Leave_button() : 
global Current_userV2
database_connect=sqlite3.connect('NOTES_DB.db')
data_cursor=database_connect.cursor()
data_cursor.execute('UPDATE LOGINS_STATE set current_user=NULL,current_state=0')
database_connect.commit()
Current_userV2=''
controller.show_frame(Login_page)
disconnect_button=Button(self,text="Disconnect",bg='red',command=Leave_button,font=('arial',15))
disconnect_button.place(x=350,y=500)
....

我发现了以下方法:只是在main_app类中更改:

class main_app(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.container = tk.Frame(self)
self.container.pack(fill="both", expand=True)
self.current_frame = None
data_baseconnect=sqlite3.connect('NOTES_DB.db')
data_cursor=data_baseconnect.cursor()
data_cursor.execute('SELECT current_state from LOGINS_STATE')
data_baseconnect.commit()
Current_person_state = data_cursor.fetchall()
if Current_person_state[0][0]==0: 
self.show_frame(Login_page)
else :
self.show_frame(Welcoming_page)
def show_frame(self, new_frame_class):
if self.current_frame:
self.current_frame.destroy()
self.current_frame = new_frame_class(self.container, controller=self)
self.current_frame.pack(fill="both", expand=True)

最新更新