def sign_in_f(): user_si_name = name_entry.get() user_si_pass = password_entry.get() if user_si_name in success: i = success.index(user_si_name) if success[i+1] == user_si_pass: tk.Tk.destroy() #import os with open('anjian.py', 'r', encoding='utf-8') as f: code = compile(f.read(), 'anjian.py', 'exec') exec(code) else: result = tk.messagebox.askquestion(title="登录提示",message="用户名不存在,是否立即注册?") if result == "yes": sign_up_f() else: pass修改TypeError: Tk.destroy() missing 1 required positional argument: 'self'导致的错误
时间: 2023-12-11 09:05:45 浏览: 115
这个错误是因为 `Tk.destroy()` 方法需要一个 `self` 参数,即 `Tk` 对象本身。在这里,应该使用 `tk.Tk().destroy()` 来销毁 `Tk` 对象。修改后的代码如下:
```python
def sign_in_f():
user_si_name = name_entry.get()
user_si_pass = password_entry.get()
if user_si_name in success:
i = success.index(user_si_name)
if success[i+1] == user_si_pass:
tk.Tk().destroy()
with open('anjian.py', 'r', encoding='utf-8') as f:
code = compile(f.read(), 'anjian.py', 'exec')
exec(code)
else:
result = tk.messagebox.askquestion(title="登录提示", message="用户名不存在,是否立即注册?")
if result == "yes":
sign_up_f()
else:
pass
```
请注意,这种方式销毁 `Tk` 对象可能会导致其他问题,因为它会在主循环之外销毁对象。建议使用 `tk.Toplevel()` 创建一个顶级窗口来代替销毁 `Tk` 对象。
阅读全文