对外部函数中的变量使用 tkinter 条目
Using tkinter Entries for variables in external functions
我正在尝试 link 将变量输入到 Tkinter 中的函数中。我有 16 个条目/变量,我想在我的函数中使用。但是,我正在为变量的输入和分配之间的接口而苦苦挣扎。
我的代码:
import Tkinter
import pandas as pd
import numpy as np
class simulation_tk(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
c2_low =Tkinter.StringVar()
c3_low =Tkinter.StringVar()
ic4_low =Tkinter.StringVar()
nc4_low =Tkinter.StringVar()
ic5_low =Tkinter.StringVar()
nc5_low =Tkinter.StringVar()
neoc5_low =Tkinter.StringVar()
n2_low = Tkinter.StringVar()
c2_high =Tkinter.StringVar()
c3_high =Tkinter.StringVar()
ic4_high =Tkinter.StringVar()
nc4_high =Tkinter.StringVar()
ic5_high =Tkinter.StringVar()
nc5_high =Tkinter.StringVar()
neoc5_high=Tkinter.StringVar()
n2_high = Tkinter.StringVar()
self.entry = Tkinter.Entry(self, textvariable = c2_low).grid(column=0,row=1,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = c2_high).grid(column=0,row=2,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = c3_low).grid(column=0,row=3,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = c3_high).grid(column=0,row=4,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = ic4_low).grid(column=1,row=1,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = ic4_high).grid(column=1,row=2,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = nc4_low).grid(column=1,row=3,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = nc4_high).grid(column=1,row=4,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = ic5_low).grid(column=0,row=5,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = ic5_high).grid(column=0,row=6,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = nc5_low).grid(column=0,row=7,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = nc5_high).grid(column=0,row=8,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = neoc5_low).grid(column=1,row=5,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = neoc5_high).grid(column=1,row=6,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = n2_low).grid(column=1,row=7,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = n2_high).grid(column=1,row=8,sticky='EW')
self.resizable(False,False)
self.resizable(False,False)
button = Tkinter.Button(self,text=u"simulate")
button.bind("<Button-1>", simulation)
button.grid(column=3,row=9)
def simulation(self):
#code for this not included but uses all 16 entries/variable
if __name__ == "__main__":
app = simulation_tk(None)
app.title('Simulation')
app.mainloop()
我希望将我的条目的输入分配给一个变量,然后可以在单独的函数(模拟)中使用该变量
你可以通过像
这样调用它的"textvariable"来从一个盒子中取出值
c2_low.get()
因此,如果您将这些变量更改为 self.c2_low、self.c2_high 等,您将能够在模拟函数中调用它们,例如:
import Tkinter
import pandas as pd
import numpy as np
class simulation_tk(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
self.grid()
def initialize(self):
self.c2_low =Tkinter.StringVar()
self.entry = Tkinter.Entry(self, textvariable = self.c2_low).grid(column=0,row=1,sticky='EW')
self.resizable(False,False)
button = Tkinter.Button(self,text=u"simulate",command=self.simulation)
button.grid(column=3,row=9)
def simulation(self):
print self.c2_low.get()
#code for this not included but uses all 16 entries/variable
if __name__ == "__main__":
app = simulation_tk(None)
app.title('Simulation')
app.mainloop()
请注意,我也更改了按钮,但现在如果您在条目中写入内容,然后按下按钮,它将被打印到控制台。从这里你应该能够将它传递给一个变量或者用它做任何事情。
我的建议是不要使用StringVar
。这根本没有必要,而且显然会增加你的困惑。这需要你稍微重构你的代码,但是重构会让你的代码更容易维护。
第一步是将小部件创建与小部件布局分开,并保存对每个小部件的引用。本质上,我们是在记住小部件而不是在记住变量。
def initialize(self):
self.grid()
self.c2_low = Tkinter.Entry(self)
self.c2_high = Tkinter.Entry(self)
...
self.cd_low.grid(column=0,row=1,sticky='EW')
self.c2_high.grid(column=0,row=2,sticky='EW')
...
self.resizable(False,False)
接下来,只需从 simulation
中的每个条目小部件中获取值:
def simulation(self):
c2_low = self.c2_low.get()
c2_high = self.c2_high.get()
...
请注意,无论您是否使用 StringVar
s,最后一部分都是相同的。在任何一种情况下,您都使用 .get()
方法来获取值。只是使用这种方法,您只有一个对象(小部件),而不是您必须管理的两个(小部件和变量)。
我正在尝试 link 将变量输入到 Tkinter 中的函数中。我有 16 个条目/变量,我想在我的函数中使用。但是,我正在为变量的输入和分配之间的接口而苦苦挣扎。
我的代码:
import Tkinter
import pandas as pd
import numpy as np
class simulation_tk(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
c2_low =Tkinter.StringVar()
c3_low =Tkinter.StringVar()
ic4_low =Tkinter.StringVar()
nc4_low =Tkinter.StringVar()
ic5_low =Tkinter.StringVar()
nc5_low =Tkinter.StringVar()
neoc5_low =Tkinter.StringVar()
n2_low = Tkinter.StringVar()
c2_high =Tkinter.StringVar()
c3_high =Tkinter.StringVar()
ic4_high =Tkinter.StringVar()
nc4_high =Tkinter.StringVar()
ic5_high =Tkinter.StringVar()
nc5_high =Tkinter.StringVar()
neoc5_high=Tkinter.StringVar()
n2_high = Tkinter.StringVar()
self.entry = Tkinter.Entry(self, textvariable = c2_low).grid(column=0,row=1,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = c2_high).grid(column=0,row=2,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = c3_low).grid(column=0,row=3,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = c3_high).grid(column=0,row=4,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = ic4_low).grid(column=1,row=1,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = ic4_high).grid(column=1,row=2,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = nc4_low).grid(column=1,row=3,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = nc4_high).grid(column=1,row=4,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = ic5_low).grid(column=0,row=5,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = ic5_high).grid(column=0,row=6,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = nc5_low).grid(column=0,row=7,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = nc5_high).grid(column=0,row=8,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = neoc5_low).grid(column=1,row=5,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = neoc5_high).grid(column=1,row=6,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = n2_low).grid(column=1,row=7,sticky='EW')
self.entry = Tkinter.Entry(self, textvariable = n2_high).grid(column=1,row=8,sticky='EW')
self.resizable(False,False)
self.resizable(False,False)
button = Tkinter.Button(self,text=u"simulate")
button.bind("<Button-1>", simulation)
button.grid(column=3,row=9)
def simulation(self):
#code for this not included but uses all 16 entries/variable
if __name__ == "__main__":
app = simulation_tk(None)
app.title('Simulation')
app.mainloop()
我希望将我的条目的输入分配给一个变量,然后可以在单独的函数(模拟)中使用该变量
你可以通过像
这样调用它的"textvariable"来从一个盒子中取出值c2_low.get()
因此,如果您将这些变量更改为 self.c2_low、self.c2_high 等,您将能够在模拟函数中调用它们,例如:
import Tkinter
import pandas as pd
import numpy as np
class simulation_tk(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
self.grid()
def initialize(self):
self.c2_low =Tkinter.StringVar()
self.entry = Tkinter.Entry(self, textvariable = self.c2_low).grid(column=0,row=1,sticky='EW')
self.resizable(False,False)
button = Tkinter.Button(self,text=u"simulate",command=self.simulation)
button.grid(column=3,row=9)
def simulation(self):
print self.c2_low.get()
#code for this not included but uses all 16 entries/variable
if __name__ == "__main__":
app = simulation_tk(None)
app.title('Simulation')
app.mainloop()
请注意,我也更改了按钮,但现在如果您在条目中写入内容,然后按下按钮,它将被打印到控制台。从这里你应该能够将它传递给一个变量或者用它做任何事情。
我的建议是不要使用StringVar
。这根本没有必要,而且显然会增加你的困惑。这需要你稍微重构你的代码,但是重构会让你的代码更容易维护。
第一步是将小部件创建与小部件布局分开,并保存对每个小部件的引用。本质上,我们是在记住小部件而不是在记住变量。
def initialize(self):
self.grid()
self.c2_low = Tkinter.Entry(self)
self.c2_high = Tkinter.Entry(self)
...
self.cd_low.grid(column=0,row=1,sticky='EW')
self.c2_high.grid(column=0,row=2,sticky='EW')
...
self.resizable(False,False)
接下来,只需从 simulation
中的每个条目小部件中获取值:
def simulation(self):
c2_low = self.c2_low.get()
c2_high = self.c2_high.get()
...
请注意,无论您是否使用 StringVar
s,最后一部分都是相同的。在任何一种情况下,您都使用 .get()
方法来获取值。只是使用这种方法,您只有一个对象(小部件),而不是您必须管理的两个(小部件和变量)。