python 中的吸气剂,tkinter

我需要访问来自我的类“makeEntry”的信息,准确地说是文本变量。我试过 make get 函数,但我在 python 中读到它是没有必要的。


def temp():

    print(e_full_name.get_text())

class makeEnetry:

    def __init__(self, i_parent, i_width, i_row, i_column, i_text):

        test.set(i_text)

        test =  StringVar()


        entry = Entry(master = i_parent, width = i_width, textvariable = test)

        entry.grid(row = i_row, column = i_column, padx = 5, pady =5 )

        

    def get_text(self):

        return self.test.get()

我试图将我的 test = StringVar() 移动到函数上方,只是在类中以在另一个函数中引用它,但它不起作用。我是 python 的新手,我不知道我做错了什么。


def temp():

    print(e_full_name.get_text())

class makeEnetry:

    test =  StringVar()

    def __init__(self, i_parent, i_width, i_row, i_column, i_text):

        test.set(i_text)

.

.

.


白猪掌柜的
浏览 76回答 2
2回答

潇湘沐

我已经写了一个工作解决方案。正如我在评论中提到的,该test变量应该是一个实例变量 ( self)。为了更好地理解,我在我的示例代码中添加了一些注释。代码:import tkinter as tkdef temp():    print(entry_inst.get_text())  # Printing the result of "get_text" method of "entry_inst" object.root = tk.Tk()class makeEnetry:    def __init__(self, i_parent, i_width, i_row, i_column, i_text):        self.test = tk.StringVar()        self.test.set(i_text)        entry = tk.Entry(master=i_parent, width=i_width, textvariable=self.test)        entry.grid(row=i_row, column=i_column, padx=5, pady=5)    def get_text(self):        return self.test.get()entry_inst = makeEnetry(root, 20, 1, 1, "TEST")  # Creating an object from "makeEnetry" classbutton = tk.Button(root, text="PUSH ME", command=temp)  # Creating a button which will call the "temp" functionbutton.grid(row=2, column=1)tk.mainloop()界面:控制台输出:仅供参考:我已经更改了输入框中的文本并单击按钮。>>> python3 test.pyTESTTEST1TEST12TEST123

慕仙森

您希望外部函数可以访问的任何变量都需要是一个实例变量。例如,如果您使用self.test = StringVar(), 并self.test在类中的任何地方使用而不是仅使用test,那么任何引用该类实例的代码都可以访问该变量。the_entry = makeEnetry(root, 20, 1, 1, "Hello, world!")...print(the_entry.test.get())但是,创建 getter 或 setter 并没有错。例如,StringVar有一个 getter( .get()) 和 setter( .set(...))。创建 getter 和 setter 的优点是它将内部实现与外部接口分开。使用 getter 或 setter,您可以隐藏您正在使用的事实StringVar,调用者不需要知道。函数、实例变量以及 getter 和 setter 的问题在于您正在创建用户界面或 API。您正在创建一个对象,然后告诉外界“这就是您与该对象交互的方式”。有时 getter 和 setter 有意义,有时则不然。这取决于您希望对象 UI/API 是什么,以及您是否希望向外界公开内部实现细节。在这种特定情况下,它似乎the_entry.get_text()是一个更干净的接口,the_entry.test.get(...)因为它使您可以更自由地更改内部实现,而不会影响使用该对象的代码。这一切都归结为您希望外部代码如何与您创建的对象进行交互。调用者应该知道这个对象使用 a StringVar,还是应该只知道它可以调用get_text来与之交互?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python