我已经尝试为库管理系统编写程序我正在使用tkinter模块。我已经写了下面的代码,但是当我尝试创建多个文本框时,我收到了以下错误。
File "Hope_work.py", line 22, in __init__
frame = F(container, self)
File "Hope_work.py", line 62, in __init__
pwd_lable.pack()
UnboundLocalError: local variable 'pwd_lable' referenced before assignment
以下是我在PageOne课程中收到错误的完整程序
import tkinter as tk
import os
LARGE_FONT= ("Verdana", 12)
class Myprogramapp(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 = {}
for F in (StartPage, PageOne):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
label = tk.Label(self, text="Library Managment System", font=LARGE_FONT)
label.pack(pady=10,padx=10)
button = tk.Button(self, text="Admin Login",
command=lambda: controller.show_frame(PageOne))
button.pack()
button1 = tk.Button(self, text="Lib Login")
button1.pack()
class PageOne(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
name_label = tk.Label(self, text="User ID : ")
pwd_label = tk.Label(self.name_lable, text="Password:")
name_label.pack(pady=10,padx=10)
pwd_lable.pack(pady=10,padx=10)
name_lable = tk.Entry(self)
pwd_lable = tk.Entry(self, show="*")
name_lable.pack()
pwd_lable.pack()
button1 = tk.Button(self, text="Login")
button1.pack()
if __name__ == "__main__":
app = Myprogramapp()
app.mainloop()
**
答案 0 :(得分:0)
看起来你试图咬掉的东西比你可以咀嚼更多,所以说这个代码的例子。你会错过使用tkinter的部分,这些部分应该被理解,然后再转向更复杂的事情。
在尝试使用这样的多个类之前,请尝试更多地关注tkinter如何工作以及如何在单个类中甚至在类之外正确实现其所有小部件。
您不会将小部件分配给另一个小部件,就像您尝试在此处一样:
pwd_label = tk.Label(self.name_lable, text="Password:")
这是你的引用中引用的问题。您需要将Label小部件分配给根窗口,框架或顶层。
您的缩进不干净,如果您在问题中粘贴的方式准确无误,那么您的代码将无效,因为def show_frame()
方法不在Myprogramapp
类内。
您在这里无缘无故地导入os
,导入您当前未使用的库是不太好的做法。
您应该将程序的一些重要部分放入类属性中,例如输入字段。如果您要为该字段输入密码并尝试get()
方法内的输入字段中的字符串,则您将无法将其作为类属性。您可以通过向窗口小部件名称添加self.
前缀来解决此问题。
完成所有更改后,您将获得一个带有2个按钮的tkinter窗口。 Admin Login
按钮将显示登录屏幕。话虽如此,我认为你应该在学习tkinter或者在一个单独的课程中一起离开课程,直到你对类,方法和属性如何工作和使用有充分的理解。