使用 tkinter 的按钮和条目小部件更新实例变量

时间:2021-04-15 14:28:50

标签: python class oop tkinter tkinter-entry

我正在尝试实现一个登录用户的小应用程序,登录后的用户可以添加/更新/删除文本文件的内容。这是迄今为止我所拥有的代码的粗略草图:

class admin():
        def __init__(self):

                self.app = Tk()
                .
                self.name=StringVar()
                update = Button(self.app,....,command=self.update)
                .
                .
                .

        def update():
                #Function to take different entries using Entry widget of tkinter in another window
                anotherapp = Tk()
                nameentry = Entry(anotherapp,textvariable = self.name)
                submitbutton = Button(anotherapp,....,command=submit)
                .
                .

        def submit():
                #Opens a file and adds entries to a textfile. 
                namevar = self.name.get()
                # code to append to file

为了解释上述内容,我有一个班级管理员。创建此类的实例将打开一个带有创建、更新、删除等按钮的窗口。单击其中一个按钮时,将调用相应的函数(在同一类中定义)(如果函数有参数,我使用 lambda:,但到目前为止还没有)。

因此,在我提到的代码中,假设我单击“更新”按钮,它应该调用更新函数,该函数会打开另一个窗口并获取必须在文本文件中更新的文本(通过 Entry 小部件)。所以根据代码它会更新 name 的值。单击提交时,函数 submit 使用 .get() 获取 name 的字符串值,并将其附加到文本文件中。

代码执行时没有错误,但它不会读取用户的输入。当我点击提交按钮时,空白行会附加到我的文本文件中。

现在我不明白为什么这不起作用。 name 变量在 init 中定义,可以被同一个类的函数更新。我已经尝试了很多方法来完成这项工作,包括在按钮命令中添加参数,在其他地方定义 name 等。即使我已经解决了错误,我也得到了相同的结果:文件被附加空行。我还尝试将名称命名为类变量,但这不起作用,因为它是使用 StringVar() 声明的,需要它成为 tkinter 窗口的一部分。我想我也试过在 submit 函数中嵌套 update 函数,但我不知道为什么这不起作用,或者我没有正确实现它。

我不知道这是否与 tkinter 的 StringVar().get() 函数的工作有关。

我想不出任何其他方式来实现我手头的情况。我愿意接受关于更改代码结构的建议,只要它不是主要的主要内容并且设法实现我所描述的功能。

如果我错过了一些基本的东西,我很抱歉,因为我最近才开始在 python 中尝试 OOP。并提前感谢您的帮助。

0 个答案:

没有答案
相关问题