首页 > 解决方案 > 使用 tkinter 的按钮和入口小部件更新实例变量

问题描述

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

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:在函数有参数的情况下使用,但到目前为止,它没有)。

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

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

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

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

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

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

标签: pythonclassooptkintertkinter-entry

解决方案


推荐阅读