如果我的登录用户名和密码在我的登录 window 中正确,如何在 Tkinter 中打开一个新的 window?

How to open a new window in Tkinter if my login username and password are correct in my login window?

我想打开一个新的 window 一旦我的 用户名和密码 在我第一次登录 window 时正确,我的登录 window文件名为 main.py 并且我定义了一个函数来验证我的 用户名和密码

for i in c:
    if user == i['USUARIO'] and contra == i['CONTRASEÑA']:
        messagebox.showinfo(title='Correcto', message='Usuario y Contraseña Correctos')
        menuPrincipal.destroy()
        mainformuser.open()
        break
else:
    messagebox.showerror(tittle=None, message='Usuario o Contraseña Incorrectos')

它工作正常,直到 menuPrincipal.destroy() 这是我的第一个 window,我使用了 destroy() 用户名和密码 正确后关闭它,问题是当我想打开一个新的 window 时,我的第二个 window 文件被命名为 mainformuser.py 并且在该文件中我定义了一个函数 def open(): 并导入到第一个文件中。它有效(尽管给我这个错误

invalid command name "2716849470592time" , while executing "2716849470592time" ("after" script))

但我认为我应该在我的新 window 中使用 def open(): 因为我需要在我的第二个 window 中做很多事情并且def open(): 中应包含的所有内容,一旦我按下登录按钮并且我的用户名和密码正确,插入 windows 的正确方法是什么??,任何想法请告诉我,谢谢

更新

这是我的第二个window文件mainfomuser.py

from tkinter import *
from time import *
from PIL import ImageTk, Image
import sqlite3
from tkinter import messagebox

 
def open():

    top = Tk()
    top.title('Menú Principal')
    top.configure(background='black')
    top.resizable(True, True)
           
    app_width = 1300
    app_height = 777
    screen_width = top.winfo_screenwidth()
    scree_height = top.winfo_screenheight()
    x = (screen_width/2) - (app_width/2)
    y = (scree_height/2.2) - (app_height/2)
    top.geometry(f'{app_width}x{app_height}+{int(x)}+{int(y)}')

通过将所有内容保存在一个单独的模块中并导入它来保持代码整洁总是好的。但是有一两件事需要注意tkinter

  • 无论何时你说 Tk() 你都在创建一个 Tcl 解释器的实例。所以现在在整个代码中,将使用这个解释器,除非提到使用一个新的解释器。因此,如果您导入新文件,请确保先销毁旧的 Tk(),然后再制作一个 Tk()

  • 但在这里我认为最好在这里使用 Toplevel() 作为新的 window 而不是 Tk() 而不是 menuPrincipal.destroy()menuPrincipal().withdraw() 隐藏主 window 之后 menuPrincipal.deiconify() 随时将其恢复。

我不太了解你的代码,所以如果你不打算重用你正在销毁的window,那么你可以继续销毁它而不是隐藏它。