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
相关产品推荐
相关产品推荐

