如何在我编写它们以供进一步回顾后将值保留在 Entry Widget 中

How to keep values in Entry Widget after I wrote them for furthers lookback

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

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()

所以我将输入放入条目然后按下确定按钮,此时变量 f 被存储并且输入 window 关闭,但是如果我设法 return input window刚好是0值,需要保留为我一开始写的值!

更新代码

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.inputVar1 = tk.DoubleVar()
        self.inputVar2 = 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.inputVar1, self.inputVar2)

# 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()

和以前一样,我需要存储通过将它们输入位于输入 window 中的两个 entrywidgets 创建的变量,因为我稍后需要这些值并且还需要将这些值显示到输入 window 如果我决定回来看一看!

您遇到的主要问题是您销毁了 window,然后在每次单击按钮时创建一个新的。在下面的示例中,我在主 class 中有 DoubleVar。这样它就不会每次都被破坏。但是,每次创建新的 window 时,它将使用相同的 DoubleVar,因此每个 Entry 小部件都将显示它持有的当前值。

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

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()

作为旁注,如果您希望消息框获取用户输入和 return 值而不是创建您自己的值,您还可以参考 tkinter.simpledialog.askstring