tkinter中ttk.Scale滑块上方数值不显示,请问代码存在什么问题?
问题原因
你使用的ttk.Scale组件本身没有内置滑块数值跟随显示功能,你预期的拖动时显示数值是原生tkinter.Scale的默认特性,当前代码的问题是选择了ttk版本的Scale组件但未额外实现数值显示逻辑。
修复方案
方案1:替换为原生tk.Scale(最简单,开箱即用)
直接将代码中的ttk.Scale替换为tk.Scale即可,原生tk.Scale的showvalue参数默认为True,拖动滑块时会自动在上方显示当前数值,修改后核心代码如下:
import tkinter as tk root = tk.Tk() root.geometry('150x75') root.resizable(width=False, height=False) root.eval('tk::PlaceWindow . center') v1 = tk.IntVar() # 仅修改这里的组件类即可 tk.Scale(root, from_=0, to=100, orient='horizontal', variable=v1).pack(pady=20) root.mainloop()
方案2:保留ttk.Scale,手动添加数值显示逻辑
如果必须使用ttk风格的Scale组件,可以额外添加一个Label控件,绑定Scale的拖动事件实时更新数值,完整示例如下:
import tkinter as tk from tkinter import ttk root = tk.Tk() root.geometry('150x100') root.resizable(width=False, height=False) root.eval('tk::PlaceWindow . center') v1 = tk.IntVar() # 新增显示数值的标签 value_label = tk.Label(root, text='当前值:0') value_label.pack(pady=(10, 0)) def update_scale_value(val): # val是拖动时Scale返回的当前值字符串,转成int后更新标签 value_label.config(text=f'当前值:{int(float(val))}') ttk.Scale( root, from_=0, to=100, orient='horizontal', variable=v1, command=update_scale_value ).pack(pady=10) root.mainloop()
内容的提问来源于stack exchange,提问作者Shidharth Routh
相关产品推荐
相关产品推荐

