从 GUI 滑块获取可变浮点值
Get a variable float value from GUI slider
希望你们一切都好。
我正在尝试编写代码,在其中使用 GUI 中的滑块输入变量值。我可以让滑块工作并生成所需的值,但我无法将生成的值分配给变量。我确信这是一个我不理解的简单错误,可能与秤生成的价值类型有关,但我无法修复它。
这是我尝试执行的代码。
import math
import sympy
import scipy
from sympy import *
from scipy import optimize
from tkinter import *
def Compute():
return scaleThetaB.get()
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()
ThetaB=Compute()
print(ThetaB)
这是 GUI 的图片:
GUI
在这种特定情况下,我想将滑块的值 (79.1) 分配给我的变量 ThetaB。
这是错误信息:
Error Message
感谢您的尝试和帮助!
要将值分配给变量,您可以简单地使用全局变量和 global
:
from tkinter import Tk, Scale, Button
theta_b = 0
def compute():
global theta_b
theta_b = scale_theta_b.get()
window = Tk()
window.title("Variable Selection")
window.geometry('400x300')
window['bg'] = '#D99D08'
scale_theta_b = Scale(
window, from_=0, to=150, length=1000, orient='horizontal',
font=('Arial', 20), tickinterval=10, showvalue=1, resolution=0.1,
troughcolor='#990101'
)
scale_theta_b.pack()
button = Button(window, text='Compute', command=compute)
button.pack()
window.mainloop()
您不需要使用 HORIZONTAL
等全局常量,它们大多数时候代表相同的名称字符串,只是小写,所以我建议使用它们,因为您不需要导入任何额外的。
为什么不使用 *
?好吧,你导入了所有东西,但你可能不知道或忘记了你导入的所有名称,这可能会导致一个问题,即你从两个模块导入相同的东西,但最后一个导入覆盖第一个,所以你想使用的名称可能不会引用您认为它引用的对象。换句话说,它有助于保持名字space 干净。
(附加信息:您应该导入您需要的内容,例如 from module import Class1, func_1, var_2
等等,或者导入整个模块:import module
然后您也可以使用别名:import module as md
或类似的东西)
还有:
我强烈建议关注 PEP 8 - Style Guide for Python Code。函数和变量名称应在 snake_case
中,class 中的名称应在 CapitalCase
中。如果它用作关键字参数 (func(arg='value')
) 的一部分,则 =
周围不要有 space,但如果它用于 =
,则周围有 space赋值 (variable = 'some value'
)。在运算符周围有 space(+-/
等:value = x + y
(此处除外 value += x + y
))。在函数和 class 声明周围有两个空行。
希望你们一切都好。
我正在尝试编写代码,在其中使用 GUI 中的滑块输入变量值。我可以让滑块工作并生成所需的值,但我无法将生成的值分配给变量。我确信这是一个我不理解的简单错误,可能与秤生成的价值类型有关,但我无法修复它。
这是我尝试执行的代码。
import math
import sympy
import scipy
from sympy import *
from scipy import optimize
from tkinter import *
def Compute():
return scaleThetaB.get()
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()
ThetaB=Compute()
print(ThetaB)
这是 GUI 的图片: GUI
在这种特定情况下,我想将滑块的值 (79.1) 分配给我的变量 ThetaB。
这是错误信息: Error Message
感谢您的尝试和帮助!
要将值分配给变量,您可以简单地使用全局变量和 global
:
from tkinter import Tk, Scale, Button
theta_b = 0
def compute():
global theta_b
theta_b = scale_theta_b.get()
window = Tk()
window.title("Variable Selection")
window.geometry('400x300')
window['bg'] = '#D99D08'
scale_theta_b = Scale(
window, from_=0, to=150, length=1000, orient='horizontal',
font=('Arial', 20), tickinterval=10, showvalue=1, resolution=0.1,
troughcolor='#990101'
)
scale_theta_b.pack()
button = Button(window, text='Compute', command=compute)
button.pack()
window.mainloop()
您不需要使用 HORIZONTAL
等全局常量,它们大多数时候代表相同的名称字符串,只是小写,所以我建议使用它们,因为您不需要导入任何额外的。
为什么不使用 *
?好吧,你导入了所有东西,但你可能不知道或忘记了你导入的所有名称,这可能会导致一个问题,即你从两个模块导入相同的东西,但最后一个导入覆盖第一个,所以你想使用的名称可能不会引用您认为它引用的对象。换句话说,它有助于保持名字space 干净。
(附加信息:您应该导入您需要的内容,例如 from module import Class1, func_1, var_2
等等,或者导入整个模块:import module
然后您也可以使用别名:import module as md
或类似的东西)
还有:
我强烈建议关注 PEP 8 - Style Guide for Python Code。函数和变量名称应在 snake_case
中,class 中的名称应在 CapitalCase
中。如果它用作关键字参数 (func(arg='value')
) 的一部分,则 =
周围不要有 space,但如果它用于 =
,则周围有 space赋值 (variable = 'some value'
)。在运算符周围有 space(+-/
等:value = x + y
(此处除外 value += x + y
))。在函数和 class 声明周围有两个空行。