如何在我编写它们以供进一步回顾后将值保留在 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
。
我需要从 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
。