我试图从另一个类的条目小部件返回一个值。你知道吗
我的想法是,当用户成功登录时,欢迎屏幕将显示刚刚登录的用户名。你知道吗
我试过用这个:
self.userLogged = Label(main, text = self.entry_username.get())
self.userLogged.pack()
我尝试从login
类链接>;self.entry.entry_username.get()
。但错误代码如下:
AttributeError: 'App' object has no attribute 'entry_username'
我错在哪里?你知道吗
以下是完整代码:
from tkinter import *
import tkinter.ttk as ttk
class App():
def __init__(self,master):
notebook = ttk.Notebook(master)
notebook.pack(expand = 1, fill = "both")
#Frames
main = ttk.Frame(notebook)
notebook.add(main, text='Welcome Screen')
self.userLogged = Label(main, text = self.entry_username.get())
self.userLogged.pack()
###################################################################################################################################
##USERS##
###################################################################################################################################
class login(Frame):
def __init__(self, master):
super().__init__(master)
self.label_username = Label(self, text="Username: ",font=("bold",16))
self.label_password = Label(self, text="Password: ",font=("bold",16))
self.entry_username = Entry(self, font = ("bold", 14))
self.entry_password = Entry(self, show="*", font = ("bold", 14))
self.label_username.grid(row=0, sticky=E)
self.label_password.grid(row=1, sticky=E)
self.entry_username.grid(row=0, column=1)
self.entry_password.grid(row=1, column=1)
self.logbtn = Button(self, text="Login", font = ("bold", 10), command=self._login_btn_clicked)
self.logbtn.grid(columnspan=2)
self.pack()
def _login_btn_clicked(self):
# print("Clicked")
username = self.entry_username.get()
password = self.entry_password.get()
# print(username, password)
account_list = [line.split(":", maxsplit=1) for line in open("passwords.txt")]
# list of 2-tuples. Usersnames with colons inside not supported.
accounts = {key: value.rstrip() for key, value in account_list}
# Convert to dict[username] = password, and slices off the line ending.
# Does not support passwords ending in whitespace.
if accounts[username] == password:
self.label_username.grid_forget()
self.label_password.grid_forget()
self.entry_username.grid_forget()
self.entry_password.grid_forget()
self.logbtn.grid_forget()
self.pack_forget()
app = App(root)
else:
print("error")
root = Tk()
root.minsize(950, 450)
root.title("test")
lf = login(root)
root.mainloop()
首先,您应该将类名从
class login(Frame)
更改为class Login(Frame)
。你知道吗在修复它之前,您从App调用了login函数,但是您需要调用
Login
类并使用它。你知道吗有了这个补丁,我可以调用欢迎屏幕。你知道吗
在tkinter中处理多个类时,最好对主窗口和框架使用类固有性。这允许我们使用
self.master
在类之间进行交互。你知道吗那就是说你有一些事情要改变。在不需要的地方使用
self
,应该执行import tkinter as tk
以防止方法被覆盖。你知道吗我在你的代码中添加了一个类,所以我们使用一个类作为根窗口。然后使用一个类作为登录屏幕,然后使用一个类作为登录后的框架。你知道吗
相关问题 更多 >
编程相关推荐