如何在我编写后将值保留在条目小部件中以进行进一步的回溯



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

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

所以我将输入放入条目中,然后按下 okbutton,此时变量 f 被存储并且输入窗口关闭,但是如果我设法返回输入窗口,值恰好是 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()

和以前一样,我需要存储通过将它们键入到位于输入窗口中的两个 entrywidget 中创建的变量,因为我稍后将需要这些值,如果我决定回来进一步查看,还需要将这些值显示在输入窗口中!

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

现在,尽管您可以在DoubleVar上使用全局以在类之间使用它。使用课程时,我更喜欢远离它。要在没有全局的情况下执行此操作,您只需传入变量即可。

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

相关内容

  • 没有找到相关文章

最新更新