gpt4 book ai didi

python - 对 root 与 self.root 以及 __init__ 的使用感到困惑。也与定义和类混淆

转载 作者:行者123 更新时间:2023-11-30 22:40:55 26 4
gpt4 key购买 nike

第一:

from tkinter import *


self.root = Tk()
self.root.configure(bg="red", padx=10, pady=10)
self.root.title("WELCOME- PLEASE LOGIN)")

name = Label(self.root, text="Name:", bg="magenta")
password = Label(self.root, text="Password", bg="magenta")
nameentry = Entry(self.root)
passwordentry = Entry(self.root)

name.grid(row=0, sticky=E)
password.grid(row=1, sticky=E)
nameentry.grid(row=0, column=1)
passwordentry.grid(row=1, column=1)

mainloop()

此代码出现错误(回溯(最近一次调用最后一次): 文件“/Users/me/pythonfolder/frametest.py”,第 4 行,位于 self.root = Tk()NameError:名称“self”未定义)

打开一个窗口,但它是空白的。

下一个:

from tkinter import *


root = Tk()
root.configure(bg="red", padx=10, pady=10)
root.title("WELCOME- PLEASE LOGIN)")

name = Label(root, text="Name:", bg="magenta")
password = Label(root, text="Password", bg="magenta")
nameentry = Entry(root)
passwordentry = Entry(root)

name.grid(row=0, sticky=E)
password.grid(row=1, sticky=E)
nameentry.grid(row=0, column=1)
passwordentry.grid(row=1, column=1)

mainloop()

这很好用。

为什么使用 self.root 与仅 root 相比会导致错误?

另外:

from tkinter import *


def __init__(self, Event= None):

root = Tk()
root.configure(bg="red", padx=10, pady=10)
root.title("WELCOME- PLEASE LOGIN)")

name = Label(root, text="Name:", bg="magenta")
password = Label(root, text="Password", bg="magenta")
nameentry = Entry(root)
passwordentry = Entry(root)

name.grid(row=0, sticky=E)
password.grid(row=1, sticky=E)
nameentry.grid(row=0, column=1)
passwordentry.grid(row=1, column=1)

mainloop()

使用init导致此错误: AttributeError:“NoneType”对象没有属性“tk”使用 self.root 代替 root 会导致相同的错误。删除 event= None 也会导致此错误。

基本上,我对 self.root 与 root、定义及其错误以及类感到困惑。

最佳答案

self 是类级别标识符。当您输入 self.root = Tk() 时,这意味着在此类中它将创建一个类级别变量 root 并使用 Tk() 对其进行初始化> 对象,每当您想在类中访问此变量时,您都可以使用 self.root 调用它,例如 self.root.title()

一个小演示:

class demo(object):
def __init__(self, a):
self.a = a

def change_a(self, new_a):
self.a = new_a

obj1 = demo(10) # will call the init fn of class and create a class level variable a = 10
print(obj1.a) # will print 10 which is stored in class level variable for obj1

obj1.change_a(20) # will call the fn and change the class level variable a = 20
print(obj1.a) # will print 20 becuase class level variable a was changed

事情并不像看起来那么简单,但我想现在你已经有了一些想法

关于python - 对 root 与 self.root 以及 __init__ 的使用感到困惑。也与定义和类混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42743032/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com