【发布时间】:2021-01-01 21:56:45
【问题描述】:
这是我第一次使用 Tkinter 创建 GUI 来模拟 DSP 设置。我被卡住了。
此 GUI 需要多个刻度。因此我写了一个通用的缩放函数。
# Overlap percent scale
def overlap_percent():
print("Testing")
# op=var.get()
# olive_features['overlap_perc']=op
# generic scale function
def create_scale(self,parent,xval,yval,start,end,resolution,orient,default,lng,clr,cmdtrig):
OHA_scale = tk.Scale(parent,resolution=resolution, from_=start, to=end, orient=orient,length=lng,fg=clr,command=cmdtrig)
OHA_scale.grid(row=xval, column=yval, sticky=tk.E + tk.W + tk.N + tk.S, padx=20, pady=4)
OHA_scale.set(default)
# Overlap %
yval=yval+2
xval=1
self.create_label(Oliveframe,xval,yval,"Overlap %")
xval=3
self.create_scale(Oliveframe,xval,yval,25,75,25,"vertical",75,90,'Black',"overlap_percent")
xval=1
yval=yval+1
self.create_arrow(Oliveframe,xval,yval)
根据上面的代码,当我调整重叠比例时,我认为它会在 cmd 行上打印“测试”。没啥事儿。为了测试代码,我将通用比例的命令替换为
def create_scale(self,parent,xval,yval,start,end,resolution,orient,default,lng,clr,cmdtrig):
OHA_scale = tk.Scale(parent,resolution=resolution, from_=start, to=end, orient=orient,length=lng,fg=clr,command=overlap_percent)
这导致了一个错误。
OHA_scale = tk.Scale(parent,resolution=resolution, from_=start, to=end, orient=orient,length=lng,fg=clr,command=overlap_percent) NameError: name 'overlap_percent' 未定义
我无法完全弄清楚我做错了什么。如何使用通用比例函数来控制多个比例?
【问题讨论】:
-
你在哪里修改了命令函数通用比例
-
我修改了我的 OP 以突出我如何修改命令功能。
-
如果
overlap_percent()在类中,则应使用self.overlap_percent。 -
所以你定义
overlap_percent()是错误的,应该是def overlap_percent(self, value)。 -
您可以将一个额外的参数(例如
name)传递给create_scale(...):def create_scale(..., cmdtrig, name):,并将名称传递给通用函数:tk.Scale(..., command=lambda v: cmdtrig(name, v)。然后定义像def some_function(self, scale_name, value):这样的通用函数。然后您可以创建诸如create_scale(..., self.some_function, 'scale1')、create_scale(..., self.some_function, 'scale2')等比例。
标签: python python-3.x tkinter