You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python2.7 Tkinter点击按钮获取Scale滑块值始终返回0.0问题

问题原因

核心问题为Tkinter变量DoubleVar的绑定实例和新建窗口不匹配:

  • 你在函数内部创建了新的Tk()实例phWin,而v = DoubleVar()没有指定master参数,默认会绑定到程序启动时的第一个Tk()主窗口,和当前的phWin无关联,无法同步Scale滑块的取值,因此永远返回默认值0.0。
修复方案

方案1(推荐):用Toplevel替代Tk创建子窗口

Tkinter程序规范下仅保留一个主Tk()实例,额外窗口都用Toplevel创建,变量不需要额外指定master就会自动绑定到全局主实例,可正常同步取值。
修改后的代码如下:

def phAdjustmentWindow(self):
    def scaleResult():
        print(v.get())
        
    v = DoubleVar()    
    # 把Tk()替换为Toplevel()即可
    phWin= Toplevel()
    phWin.title("Adjust PH value Manually")
    phScale = Scale(phWin, variable=v, from_=1, to=14, resolution=0.1,width=20,length=300, orient=HORIZONTAL)
    phScale.grid(row=0, columnspan=4)
    backToDefaultValueButton = Button(phWin, text="Default Value")
    phAlertLabel=Label(phWin, text= Constants.PH_MANUAL_ADJUST_ALERT)
    backToDefaultValueButton.grid(row=1, column=0, columnspan=4)
    phAlertLabel.grid(row=2, columnspan=4)
   
    buttonAdjustPhContinueYes = Button(phWin, text="YES", command=scaleResult)
    buttonAdjustPhContinueYes.grid(row=3, column=0, columnspan=2)
   
    buttonAdjustPhContinueNo = Button(phWin, text="NO")
    buttonAdjustPhContinueNo.grid(row=3,column=2, columnspan=2)

方案2:给DoubleVar指定当前窗口为master

如果确实需要保留多Tk()实例的设计,创建变量时指定master参数为当前的phWin即可,仅需修改一行代码:

# 原代码为 v = DoubleVar(),修改为如下内容
v = DoubleVar(master=phWin)

补充说明:如果需要设置Scale默认值,可在变量创建后加v.set(7),对应中性PH值更符合使用场景。

内容的提问来源于stack exchange,提问作者mohammad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:06:03