Python Tkinter:点击按钮弹出滑块后如何获取选中值?
解决Tkinter Scale组件点击按钮时报错"TypeError: funcSlider() missing 1 required positional argument: 'value'"的问题
嘿,我来帮你搞定这个问题!这个错误的根源其实有两个:一是你调用funcSlider时没传全它要求的参数,二是你对Tkinter Scale组件获取值的逻辑理解错了——滑块的选中值不是创建时传入的,而是要动态获取的。
先看你的代码问题:你定义的funcSlider需要posX、posY、key、value四个参数,但按钮的command=lambda: self.funcSlider(120,...这里明显没传value,而且就算传了,这个值也不是滑块的实际选中值,逻辑完全不对。
下面是修正后的完整方案:
第一步:重构滑块创建函数,去掉多余的value参数
把funcSlider改成这样,我们通过绑定滑块的command事件来实时获取值:
def funcSlider(self, posX, posY, key): # 创建Scale组件,绑定值变化时触发的函数 slider = tk.Scale( self, from_=0, to=8, orient='horizontal', # 滑块值变化时,自动调用updateSliderValue,传入key和当前值 command=lambda val: self.updateSliderValue(key, val) ) slider.place(x=posX, y=posY, in_=self) # 初始化滑块默认值到self.list self.list[key] = slider.get()
第二步:新增滑块值更新函数
这个函数会在滑块拖动时自动触发,负责把最新值存到self.list里:
def updateSliderValue(self, key, value): # Scale返回的value是字符串类型,转成整数更实用 self.list[key] = int(value)
第三步:修正按钮的command参数
确保给funcSlider传全它需要的三个参数(posX、posY、key):
button = tk.Button(self, text="button", command=lambda: self.funcSlider(120, 50, "my_slider"))
额外说明:点击按钮时查看滑块值
如果你想在点击按钮时打印当前滑块的所有值,你的onClick函数可以直接用self.list,因为它已经被实时更新了:
def onClick(self): print("当前所有滑块值:", self.list)
这样改完,不仅不会再报参数缺失的错误,还能正确获取滑块的实时选中值啦!
内容的提问来源于stack exchange,提问作者Jin Salim
相关产品推荐
相关产品推荐

