首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用按钮tkinter获取比例值?

如何使用按钮tkinter获取比例值?
EN

Stack Overflow用户
提问于 2018-06-25 04:27:25
回答 2查看 1.6K关注 0票数 0

我真的尽了最大的努力自己找到解决方案,但没有。我想从滑块中获得值,然后将其保存为csv文件(它工作得很好),只需单击一个按钮。遗憾的是,在我的按钮事件期间,我无法获取tkinter.Scale的值。我想知道它的全局变量是否可以解决我的问题,但我还没有让它们工作。我特别惊讶,因为我可以在更改时打印刻度值的实时流,但不能以有用的方式保存它。如果你能回答我的任何困惑,或者让我知道我的问题是否不清楚,或者无论如何可以更好,我将不胜感激。以下是一些帮助我走到这一步的链接:

https://www.programiz.com/python-programming/global-local-nonlocal-variables

Tkinter - Get the name and value of scale/slider

下面是我尝试打印10次最终值的过程:

代码语言:javascript
复制
from tkinter import *
root = Tk()

def scaleevent(v):    #Live update of value printed to shell
    print(v)
    variable = v

def savevalue():
    global variable              #This is what I want to work, but doesn't
    for i in range(10):
        print(variable)

scale = Scale(orient='vertical', command=scaleevent).grid(column=0,row=0)
button = Button(text="button", command=savevalue).grid(column=1, row=0)

root.mainloop()

下面是我尝试使用.get()解决问题的方法

代码语言:javascript
复制
from tkinter import *
root = Tk()

def savevalue():        #print value 10 times. In final version I will save it instead
    for i in range(10):
        print(scale.get())     #I really want this to work, but it doesn't,
    root.destroy               #is it because .get is in a function?

scale = Scale(orient='vertical', command=scaleevent).grid(column=0,row=0)
button = Button(text="button", command=savevalue).grid(column=1, row=0)

root.mainloop()

(Python 3.5、Windows 10)

编辑:

这是我第一次尝试使用全局变量时得到的错误:

代码语言:javascript
复制
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\Me\AppData\Local\Programs\Python\Python35\lib\tkinter\__init__.py", line 1550, in __call__
    return self.func(*args)
  File "C:\Users\Me\Documents\programing\tkinter scale question.py", line 15, in savevalue
    print(variable)
NameError: name 'variable' is not defined

这就是当我运行第一个代码示例时发生的事情,与我的实际项目类似。谢谢布莱恩·奥克利!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-25 08:01:15

您必须在scaleevent中使用global,因为您试图将值传递给variable。如果没有global,它会将v赋值给本地variable,然后它就不存在于savevalue

代码语言:javascript
复制
from tkinter import *

root = Tk()

def scaleevent(v):
    global variable

    print(v)
    variable = v

def savevalue():
    print(variable)

Scale(orient='vertical', command=scaleevent).grid(column=0,row=0)
Button(text="button", command=savevalue).grid(column=1, row=0)

root.mainloop()

至于第二个版本,你在var = Widget(...).grid()上犯了错误

它将None赋值给var,因为grid()/pack()/place()返回None

你必须用两行代码来完成:

代码语言:javascript
复制
var = Widget(...)
var.grid(...)

代码

代码语言:javascript
复制
from tkinter import *

root = Tk()

def savevalue():
    print(scale.get())
    root.destroy() # you forgot ()

scale = Scale(orient='vertical')
scale.grid(column=0,row=0)

button = Button(text="button", command=savevalue)
button.grid(column=1, row=0)

root.mainloop()
票数 1
EN

Stack Overflow用户

发布于 2019-07-24 13:07:42

从tkinter导入*

代码语言:javascript
复制
root = Tk()
variable=0 # only you forgot this 
def scaleevent(v):
    print(v)
    global variable

    variable=v

def savevalue():
    print(variable)

Scale(orient='vertical', command=scaleevent).grid(column=0,row=0)
Button(text="button", command=savevalue).grid(column=1, row=0)

root.mainloop()
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51013679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档