Python 代码问题,难以理解i';我做错了
我正在努力理解如何将两个功能结合起来,即登录屏幕和实际注册帖子的结合 我只是想让代码在一个基本的层次上工作,但我正在努力解决缩进和任何有助于将代码绑定在一起的问题Python 代码问题,难以理解i';我做错了,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我正在努力理解如何将两个功能结合起来,即登录屏幕和实际注册帖子的结合 我只是想让代码在一个基本的层次上工作,但我正在努力解决缩进和任何有助于将代码绑定在一起的问题 您曾经只需要一个Tk()实例,然后是一个mainloop()实例。您无缘无故地在多个部分中使用mainloop 您正在调用构建根窗口的函数两次。这真的应该只在底部调用一次 您尝试使用global来获取根窗口,但是生成根窗口的函数没有在全局名称空间中声明它,因此这不会做任何有用的事情 你有很多多余的评论。您不需要对代码中显而易见的#创建
Tk()
实例,然后是一个mainloop()
实例。您无缘无故地在多个部分中使用mainloop#创建登录按钮进行注释。如有必要,应保留评论以供澄清。在一些复杂的代码中,读取时不明显。您的代码本身就足够了,即使不需要所有注释,也不需要大部分注释
username=StringVar()。因为您没有告诉它们属于这样的顶级窗口username=StringVar(register\u screen)
默认情况下,这些变量将属于tk的主实例,也就是您的根窗口。这可能会导致问题,最近我遇到的问题是线程问题。因此,请确保始终声明该变量的所有者
标签(text=”“).pack()
。您可以在pack语句中添加填充,也可以使用grid()
以及填充,这是我处理小部件的首选方法,而不是导入*
。这将防止任何方法的覆盖,并明确您从何处获取小部件/方法
这是您的简化代码。如果你有任何问题,请告诉我。我已经将您的75行代码减少到25行
from tkinter import *
def main_account_screen():
main_screen = Tk() # create a GUI window
main_screen.geometry("700x450") # set the configuration of GUI window
main_screen.wm_iconbitmap('py.ico')
main_screen.title("Account Login") # set the title of GUI window
# create a Form label
Label(text="Login or Register", bg="red", width="300", height="2", font=("Arial Black", 13,)).pack()
Label(text="").pack()
# create Login Button
Button(text="Login", height="4", width="30", font=("Arial Black", 13,)).pack()
Label(text="").pack()
# create a register button
Button(text="Register", height="4", width="30", font=("Arial Black", 13,)).pack()
main_screen.mainloop() # start the GUI
main_account_screen() # call the main_account_screen() function
def register():
# The Toplevel widget work pretty much like Frame,
# but it is displayed in a separate, top-level window.
# Such windows usually have title bars, borders, and other “window decorations”.
# And in argument we have to pass global screen variable
register_screen = Toplevel(main_screen)
register_screen.title("Register")
register_screen.geometry("300x250")
# Set text variables
username = StringVar()
password = StringVar()
# Set label for user's instruction
Label(register_screen, text="Please enter details below", bg="blue").pack()
Label(register_screen, text="").pack()
# Set username label
username_lable = Label(register_screen, text="Username * ")
username_lable.pack()
# Set username entry
# The Entry widget is a standard Tkinter widget used to enter or display a single line of text.
username_entry = Entry(register_screen, textvariable=username)
username_entry.pack()
# Set password label
password_lable = Label(register_screen, text="Password * ")
password_lable.pack()
# Set password entry
password_entry = Entry(register_screen, textvariable=password, show='*')
password_entry.pack()
Label(register_screen, text="").pack()
# Set register button
Button(register_screen, text="Register", width=10, height=1, bg="blue").pack()
global main_screen
# add command=register in button widget
Button(text="Register", height="2", width="30", command=register).pack()
main_screen.mainloop() # start the GUI
main_account_screen() # call the main_account_screen() function
到底是什么引发了错误?按钮(text=“Register”,height=“2”,width=“30”,command=Register)。pack()^IndentationError:意外的缩进过程结束,退出代码为1comment导致IDE删除缩进-将注释缩进回,您会很好。这会反过来引发另一个错误,即您在使用后将main\u screen
声明为global
,这是不允许的。此外,当我全局声明main\u screen时,它会说-SyntaxError:name'main\u screen'在全局声明之前使用,所以我不需要全局声明它吗?非常感谢您的帮助,它帮助了我更多的理解,感谢代码的简化,这太棒了。非常感谢你
import tkinter as tk
def register():
top = tk.Toplevel(root)
top.title("Register")
top.geometry("300x250")
username = tk.StringVar(top)
password = tk.StringVar(top)
tk.Label(top, text="Please enter details below", bg="blue").pack()
tk.Label(top, text="Username * ").pack()
tk.Entry(top, textvariable=username).pack(padx=10, pady=10)
tk.Label(top, text="Password * ").pack()
tk.Entry(top, textvariable=password, show='*').pack(padx=10, pady=10)
tk.Button(top, text="Register", width=10, height=1, bg="blue").pack()
root = tk.Tk()
root.geometry("700x450")
root.title("Account Login")
tk.Label(root, text="Login or Register", bg="red", width="300", height="2", font=("Arial Black", 13,)).pack()
tk.Button(root, text="Login", height="4", width="30", font=("Arial Black", 13,)).pack(padx=15, pady=15)
tk.Button(root, text="Register", height="4", width="30", font=("Arial Black", 13,), command=register).pack()
root.mainloop()