提问人:spxrk_17 提问时间:11/17/2023 最后编辑:Cowspxrk_17 更新时间:11/17/2023 访问量:31
输入详细信息时未在文件中获取值,为空?
Not getting a value in the file when inputting details, its blank?
问:
我对编码和 Stack Overflow 比较陌生。我正在为我的学校项目制作一款 tkinter 游戏。我正在努力的部分本质上是获取 regUser() 和 regPass() 的值输入,并将它们添加到帐户文件.txt。我最初得到了 PYVAR0 和 PYVAR1,但我在网上看到使用 .get() 可以解决这个问题。现在添加了空格和 /n,但没有添加 regUser 或 regPass 的任何内容。
这一切都与 register() 和 NOT login() 有关(这将在以后完成),但如果有人能发现我在尝试检查 username() 和 password() 的输入值时可能遇到的问题与文件中保存的名称和密码,或者确实有任何关于如何做到这一点的建议,那将是惊人的。目前的首要任务是解决当前的问题,尽管:(。
代码如下:
from tkinter import *
from tkinter import ttk
import tkinter as tk
def welcomeScreen():
welcomeScreen = tk.Tk()
welcomeScreen.title("Welcome")
welcomeScreen.geometry("300x300")
choice = tk.Label(text="Welcome to Investor, please log in or register an account")
choice.pack()
loginButton1 = tk.Button(welcomeScreen, text="Log in", command=lambda: [login(), welcomeScreen.destroy()])
loginButton1.pack()
regButton1 = tk.Button(welcomeScreen, text="Register", command=lambda: [register(), welcomeScreen.destroy()])
regButton1.pack()
welcomeScreen.mainloop()
def login():
global username; tk.StringVar()
global password; tk.StringVar()
loginScreen = tk.Tk()
loginScreen.geometry("400x300")
loginScreen.title("Log in to your account")
login1 = tk.Label(loginScreen, text="Please log in to your account")
login1.pack()
signIn = ttk.Frame(loginScreen)
signIn.pack()
lbl_username = ttk.Label(signIn, text="Username:")
lbl_username.pack(fill='x', expand=True)
entry_username = Entry(signIn, textvariable=username)
entry_username.pack(fill='x', expand=True)
entry_username.focus()
lbl_password = ttk.Label(signIn, text="Password:")
lbl_password.pack(fill='x', expand=True)
entry_password = ttk.Entry(signIn, textvariable=password, show="*")
entry_password.pack(fill='x', expand=True)
btn_login = Button(signIn, text="Login", command=login)
btn_login.pack()
btn_back1 = Button(signIn, text="Back", command=lambda: [loginScreen.destroy(), welcomeScreen()])
btn_back1.pack()
def register():
global regUser
regUser=tk.StringVar()
global regPass
regPass=tk.StringVar()
regScreen = tk.Tk()
regScreen.geometry("400x300")
regScreen.title("regsiter")
register1 = tk.Label(regScreen, text="Please create a account")
register1.pack()
register = ttk.Frame(regScreen)
register.pack()
lbl_createName = ttk.Label(register, text="Create an username:")
lbl_createName.pack(fill='x', expand=True)
entry_createName = Entry(register, textvariable=regUser)
entry_createName.pack(fill='x', expand=True)
entry_createName.focus()
lbl_createPass = ttk.Label(register, text="Create an password:")
lbl_createPass.pack(fill='x', expand=True)
entry_createPass = ttk.Entry(register, textvariable=regPass)
entry_createPass.pack(fill='x', expand=True)
btn_reg = Button (register, text='Register', command=createUser)
btn_reg.pack()
btn_back2= Button(register, text="Back", command=lambda: [regScreen.destroy(), welcomeScreen()])
btn_back2.pack()
def createUser():
file = open("accountfile.txt","a")
file.write(str(regUser.get()))
file.write(" ")
file.write(str(regPass.get()))
file.write("\n")
file.close()
welcomeScreen()
答:
0赞
Tim Roberts
11/17/2023
#1
这里的微妙问题是 StringVar 必须与窗口相关联。如果未指定,则默认为当前根窗口,即 ,在创建新窗口后不久将其销毁。因此,这些变量变得“无家可归”。这样做:welcomeScreen
def register():
global regUser
global regPass
regScreen = tk.Tk()
regScreen.geometry("400x300")
regScreen.title("regsiter")
register1 = tk.Label(regScreen, text="Please create an account")
register1.pack()
register = ttk.Frame(regScreen)
register.pack()
regUser = tk.StringVar(register)
regPass = tk.StringVar(register)
在函数中需要相同的内容。login
评论
login
register
global username; tk.StringVar()
login
tk.Tk
StringVar
tk.Toplevel
master=...
tk.StringVar
tk.Tk
[register(), welcomeScreen.destroy()]
[welcomeScreen.destroy(), register()]
textvariable
Entry