如何从Tkinter GUI滑动条获取浮点数值并赋值给变量
问题原因
你的代码报错核心有两个问题:
- Tkinter的
window.mainloop()是阻塞式事件循环,只有GUI窗口被关闭后,这行代码之后的逻辑才会执行,此时窗口内的所有组件包括滑动条scaleThetaB已经被销毁,再调用scaleThetaB.get()自然无法正常取值。 - 绑定给按钮的
Compute()函数的返回值无法直接被外层主逻辑接收,按钮点击触发的函数返回值不会自动传递。
另外你原代码里字体参数也有写法错误:font=('Arial,20')应该改为font=('Arial',20),逗号位置错误会导致字体配置不生效。
修复方案
我们可以在点击按钮时就把滑动条的取值存入全局变量,不需要等窗口销毁后再去访问组件取值,修改后的代码如下:
import math import sympy import scipy from sympy import * from scipy import optimize from tkinter import * # 初始化全局变量存储滑动条取值 ThetaB = 0.0 def Compute(): global ThetaB # 点击按钮时直接把滑动条值存入全局变量 ThetaB = scaleThetaB.get() # 如果需要点击按钮后自动关闭窗口,取消下行注释即可 # window.destroy() window = Tk() window.title("Variable Selection") window.geometry('400x300') window['bg'] = '#D99D08' scaleThetaB = Scale(window,from_=0, to=150,length=1000,orient=HORIZONTAL,font=('Arial',20),tickinterval=10,showvalue=1,resolution=0.1,troughcolor='#990101') scaleThetaB.pack() button=Button(window,text='Compute',command=Compute) button.pack() window.mainloop() # 窗口关闭后直接使用已经存储好的变量即可 print(ThetaB)
逻辑说明
调整滑动条到目标值后点击Compute按钮,数值就会同步到ThetaB变量中,你可以选择手动关闭窗口,或者添加window.destroy()实现点击按钮自动关闭窗口,窗口关闭后直接使用ThetaB变量即可拿到滑动条的取值。
内容的提问来源于stack exchange,提问作者TheGoodTheBadTheUgly
相关产品推荐
相关产品推荐

