【问题标题】:Get a variable float value from GUI slider从 GUI 滑块获取可变浮点值
【发布时间】:2021-10-08 14:21:44
【问题描述】:

希望你们一切都好。

我正在尝试编写一个代码,通过在 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

在这种特定情况下,我希望将滑块 (79.1) 的值分配给我的变量 ThetaB。

这是错误消息: Error Message

感谢您的尝试和帮助!

【问题讨论】:

  • 请以文本形式发布错误消息,导入时不要使用*,还要删除.mainloop之后的代码,在这种情况下,这是导致错误的原因,因为规模不再存在
  • 哦,使用return没有意义,如果命令被按钮调用,则无法访问该变量,您可能需要使用全局变量并更改其值
  • 好的,感谢您的反馈。我尝试使用 return 的全部目的是将小部件的值存储在我的代码中需要的变量中,因为它用于方程式。我该怎么做?为什么导入时使用 * 不好?
  • 您是否尝试过使用tkinter.IntVar,并将其分配给比例尺中的variable 参数?

标签: python user-interface variables tkinter


【解决方案1】:

要将值分配给变量,您只需使用全局变量和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 之类的全局常量,它们大部分时间都表示相同的名称字符串,只是小写,所以我建议使用它们,因为您不需要额外导入任何内容。

为什么不使用*?好吧,您导入所有内容,但您可能不知道或忘记导入的所有名称,这可能会导致一个问题,即您从两个模块导入相同的内容,但最后一个导入覆盖第一个,因此您要使用的名称可能无法引用您认为它引用的对象。换句话说,它有助于保持命名空间干净。
(附加信息:您应该导入您需要的内容,例如from module import Class1, func_1, var_2 等或导入整个模块:import module 然后您也可以使用别名:import module as md 或类似的东西)

还有:
我强烈建议关注PEP 8 - Style Guide for Python Code。函数和变量名应该在snake_case,类名在CapitalCase。如果= 用作关键字参数的一部分(func(arg='value')),则不要在= 周围留有空格,但如果将= 用于分配值(variable = 'some value'),则在= 周围留有空格。在运算符周围留出空间(+-/ 等:value = x + y(此处除外value += x + y))。在函数和类声明周围有两个空行。

【讨论】:

  • 完美正是我所需要的,谢谢。我会努力改进我的格式和语法谢谢,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多