在我为进一步的lookb编写值之后,如何在Entry Widget中保存值

2024-05-14 09:14:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从窗口中的一个条目中获取一些输入值,但是每次我回到窗口时,我都需要将这些值保存在entry小部件中。我写了这样一个代码:

class Mainwindows:
    def __init__(self, master):
        self.master = master
        self.mainframe = LabelFrame(self.master)
        self.sinputbutton = Button(self.mainframe, text="INPUT", command=self.openinput)
        self.sinputbutton.pack()

    def openinput(self):
        self.inputwindow = Toplevel(self.master)
        self.app = Sinput(self.inputwindow)

class Sinput:
    def __init__(self, master):
        self.master = master
        self.inputframe = Frame(self.master)
        self.stuffinput = DoubleVar()
        self.stuffinput = Entry(self.inputframe, textvariable=self.stuffinput)
        self.stuffinput.pack()
        self.okbutton = Button(self.inputframe, text="Ok", command=self.inputok)
        self.soilbutton.pack(side="right", padx=5, pady=10)
        self.inputframe.pack()

    def inputok(self):
        global f
        f = self.stuffinput.get()
        self.master.destroy()

所以我把输入输入到输入中,然后按下OK按钮,此时变量f被存储,输入窗口关闭,但是如果我设法返回到输入窗口,值正好是0,我需要它保持为我最初写的值!在

更新的代码

^{pr2}$

与之前一样,我需要存储通过输入窗口中的两个entrywidgets创建的变量,因为我稍后将需要这些值,如果我决定回来进一步查看,还需要在输入窗口中显示这些值!在


Tags: 代码textselfmasterinitdefbuttoncommand
1条回答
网友
1楼 · 发布于 2024-05-14 09:14:45

你遇到的主要问题是你破坏了这个窗口,然后每按一次按钮就创建一个新窗口。{cd1>在下面的示例中,{cd1>中有。这样就不会每次都被摧毁。但是,每次创建一个新窗口时,它将使用相同的DoubleVar,因此每个条目小部件都将显示它所保存的当前值。在

现在,虽然您可以在DoubleVar上使用global在类之间使用它。在使用类时,我宁愿远离它。要在没有全局变量的情况下执行此操作,只需传入变量。在

import tkinter as tk

class Mainwindows:
    def __init__(self, master):
        self.master = master
        self.mainframe = tk.Frame(self.master)
        self.mainframe.pack()

        # Create the variable in the main class
        self.inputVar = tk.DoubleVar()

        self.sinputbutton = tk.Button(self.mainframe, text="INPUT", command=self.openinput)
        self.sinputbutton.pack()

        # Temp button to display value
        self.displaybutton = tk.Button(self.mainframe, text="Display", command=self.display)
        self.displaybutton.pack()

    def openinput(self):
        self.inputwindow = tk.Toplevel(self.master)

        # Pass an instance of the DoubleVar into Sinput class
        self.app = Sinput(self.inputwindow, self.inputVar)

    # Temp function to show value
    def display(self):
        print(self.inputVar.get())

class Sinput:
    def __init__(self, master, var):
        self.master = master
        self.var = var

        self.inputframe = tk.Frame(self.master)
        self.inputframe.pack()

        self.stuffinput = tk.Entry(self.inputframe, textvariable=self.var)
        self.stuffinput.pack()

        self.okbutton = tk.Button(self.inputframe, text="Ok", command=self.inputok)
        self.okbutton.pack(side="right", padx=5, pady=10)

    def inputok(self):
        self.master.destroy()

if __name__ == '__main__':
    root = tk.Tk()
    app = Mainwindows(root)
    root.mainloop()

另外,如果您希望一个消息框获取用户输入并返回值,而不是创建自己的值,那么您还可以考虑tkinter.simpledialog.askstring。在

相关问题 更多 >

    热门问题