Python tkinter:如何使用按钮调用的函数创建类对象?
我创建了一个条目,在其中输入一些值。通过单击提交按钮,我希望函数Python tkinter:如何使用按钮调用的函数创建类对象?,python,tkinter,Python,Tkinter,我创建了一个条目,在其中输入一些值。通过单击提交按钮,我希望函数create\u object获取条目值,然后创建类Test\u class的对象,将获取的值作为参数,并返回该对象 但很明显,这个对象还没有被创建,因此无法访问,对吗?如何创建类对象并访问它 from tkinter import * class Test_Class: def __init__(self, parameter ): self.parameter = parameter root = T
create\u object
获取条目
值,然后创建类Test\u class
的对象,将获取的值作为参数,并返回该对象
但很明显,这个对象还没有被创建,因此无法访问,对吗?如何创建类对象并访问它
from tkinter import *
class Test_Class:
def __init__(self, parameter ):
self.parameter = parameter
root = Tk()
def create_object():
parameter = entry.get()
object = Test_Class(parameter)
return object
entry = Entry(root, width=30)
entry.grid(row=0, column=0)
submit = Button(root, text="Submit", command=create_object)
submit.grid(row=1, column=0)
root.mainloop()
您可以完全停止使用过程编程,这样就不必担心范围问题。我所做的只是将代码转换成类并对其进行重构,以便测试您的写和读结果 另一个简单的改变是:我不再担心可能存在或可能不存在的东西,而是简单地创建了一些肯定存在的东西来保存前面提到的东西,你可以通过循环找到存在的东西
import tkinter as tk
from typing import *
class Test_Class:
def __init__(self, parameter ):
self.parameter = parameter
def __str__(self):
#allows us to call print on the entire class to print self.parameter value
return self.parameter
#extend the root
class Root(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
#you don't have to "strict type" this. I just did, cause I do
self.param_objects:List[Test_Class] = []
self.entry = tk.Entry(self, width=30)
self.entry.grid(row=0, column=0, columnspan=2)
#unless you intend for your script to modify or delete these buttons, there is no need for a reference
tk.Button(self, text="Submit", command=self.create_pobjs).grid(row=1, column=0)
tk.Button(self, text="Check", command=self.print_pobjs).grid(row=1, column=1)
def create_pobjs(self):
#create a new Test_Class instance
self.param_objects.append(Test_Class(self.entry.get()))
def print_pobjs(self):
for param in self.param_objects:
#call print on the entire Test_Class instance
print(param)
if __name__ == "__main__":
Root().mainloop()
你说过打印(对象)并检查过这是否是你想要的吗。我发现
object
是一个内置类。所以我把它改成了简单的a
。当我尝试访问(或打印)a时,它表示a未定义,这是有意义的,因为“a”只是该函数内部的局部变量。您需要将Test\u类的实例设置为全局,以便在程序中的其他位置访问。按钮回调返回的任何内容都将被丢弃。就像您必须说的那样,global a
,在您的例子中,tkinter
忽略按钮回调函数返回的值-因此您必须将该值保存在函数中的某个位置。最简单的方法是使用global
变量(需要在函数体的开头声明)。