通过单独的函数自动填充 Tkinter.entry 个框
Automatic filling of Tkinter.entry boxes by a separate function
我有一个 Tk 应用程序,它有几个用于输入数字的输入框:
self.entry = Tkinter.Entry(self, textvariable = self.c2_low).grid(column=0,row=2, sticky ='W')
self.entry = Tkinter.Entry(self, textvariable = self.c2_high).grid(column=1,row=2,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.c3_low).grid(column=0,row=3,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.c3_high).grid(column=1,row=3,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.ic4_low).grid(column=0,row=4,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.ic4_high).grid(column=1,row=4,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.nc4_low).grid(column=0,row=5,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.nc4_high).grid(column=1,row=5,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.ic5_low).grid(column=0,row=6,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.ic5_high).grid(column=1,row=6,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.nc5_low).grid(column=0,row=7,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.nc5_high).grid(column=1,row=7,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.n2_low).grid(column=0,row=9,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.n2_high).grid(column=1,row=9,sticky='W')
这完全有效,我可以在其他功能中使用数字输入。但是,我想要一个单独的函数,在单击 'fill with generic numbers' 按钮时用函数指定的通用数字填充这些输入框。这可能吗?
编辑:我有一个按钮用于对提到的那些数字进行通用模拟,但我希望输入框显示我指定的数字。
Entry 小部件的内容直接链接到它的控制变量,因此调用相应 StringVar 上的 .set() 方法将设置 entry 的内容
self.c2_low.set("c2_low")
self.c2_high.set(23) #gets converted to a str automatically
然后在同一变量上使用 .get() 方法取回内容:
try:
x = int( self.c2_low.get() )
except ValueError:
NotImplemented #handle invalid input
此外,您正在对新创建的条目调用 .grid() 方法,由于 .grid() returns None,它稍后会失去对它们的引用,它可能更易于使用一个简单的 class 将 textvariable 与 Entry 小部件组合在一起:
class Smart_entry(Tkinter.Entry):
def __init__(self,master,column,row,content="",name=None):
self.textvar = Tkinter.StringVar(master,content,name)
Tkinter.Entry.__init__(self,master,textvariable=self.textvar)
self.grid(column=column, row=row, sticky="W")
def get(self):
return self.textvar.get()
def set(self,value):
return self.textvar.set(value)
# if all the entries are int/float
# then handling the conversion in the .get() may be useful
## def get(self,conv=str):
## "returns content after converting to specified type, returns None if conversion failed"
## try:
## return conv( self.textvar.get() )
## except ValueError:
## return None
我有一个 Tk 应用程序,它有几个用于输入数字的输入框:
self.entry = Tkinter.Entry(self, textvariable = self.c2_low).grid(column=0,row=2, sticky ='W')
self.entry = Tkinter.Entry(self, textvariable = self.c2_high).grid(column=1,row=2,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.c3_low).grid(column=0,row=3,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.c3_high).grid(column=1,row=3,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.ic4_low).grid(column=0,row=4,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.ic4_high).grid(column=1,row=4,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.nc4_low).grid(column=0,row=5,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.nc4_high).grid(column=1,row=5,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.ic5_low).grid(column=0,row=6,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.ic5_high).grid(column=1,row=6,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.nc5_low).grid(column=0,row=7,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.nc5_high).grid(column=1,row=7,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.n2_low).grid(column=0,row=9,sticky='W')
self.entry = Tkinter.Entry(self, textvariable = self.n2_high).grid(column=1,row=9,sticky='W')
这完全有效,我可以在其他功能中使用数字输入。但是,我想要一个单独的函数,在单击 'fill with generic numbers' 按钮时用函数指定的通用数字填充这些输入框。这可能吗?
编辑:我有一个按钮用于对提到的那些数字进行通用模拟,但我希望输入框显示我指定的数字。
Entry 小部件的内容直接链接到它的控制变量,因此调用相应 StringVar 上的 .set() 方法将设置 entry 的内容
self.c2_low.set("c2_low")
self.c2_high.set(23) #gets converted to a str automatically
然后在同一变量上使用 .get() 方法取回内容:
try:
x = int( self.c2_low.get() )
except ValueError:
NotImplemented #handle invalid input
此外,您正在对新创建的条目调用 .grid() 方法,由于 .grid() returns None,它稍后会失去对它们的引用,它可能更易于使用一个简单的 class 将 textvariable 与 Entry 小部件组合在一起:
class Smart_entry(Tkinter.Entry):
def __init__(self,master,column,row,content="",name=None):
self.textvar = Tkinter.StringVar(master,content,name)
Tkinter.Entry.__init__(self,master,textvariable=self.textvar)
self.grid(column=column, row=row, sticky="W")
def get(self):
return self.textvar.get()
def set(self,value):
return self.textvar.set(value)
# if all the entries are int/float
# then handling the conversion in the .get() may be useful
## def get(self,conv=str):
## "returns content after converting to specified type, returns None if conversion failed"
## try:
## return conv( self.textvar.get() )
## except ValueError:
## return None