Как получить значение шкалы нажатием кнопки tkinter? - PullRequest
0 голосов
/ 24 июня 2018

Я действительно сделал все возможное, чтобы найти решение самостоятельно, но не нашел. Я хочу получить значение из ползунка и затем сохранить его в CSV-файл (который работает нормально), одним нажатием кнопки. Увы, я не могу получить значение tkinter.Scale во время моего события кнопки. Интересно, могут ли глобальные переменные решить мою проблему, но я не заставил их работать. Я особенно удивлен, потому что я могу напечатать живой масштаб значения масштаба, когда я изменяю его, но не могу сохранить его полезным способом. Если бы вы могли ответить на любое из моих недоумений или сообщить мне, если мой вопрос неясен или в любом случае может быть лучше, я был бы очень признателен. Вот несколько ссылок на вещи, которые помогли мне зайти так далеко:

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

Tkinter - Получить имя и значение шкалы / ползунка

Вот моя попытка напечатать окончательное значение 10 раз:

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():

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)

Edit:

Это ошибка, которую я получаю с первой попытки использования глобальной переменной:

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

Вот что произошло, когда я запустил первый пример кода, и точно так же мой настоящий проект. Спасибо Брайану Оукли!

Ответы [ 2 ]

0 голосов
/ 24 июля 2019

от Ткинтер Импорт *

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()
0 голосов
/ 25 июня 2018

Вы должны использовать global в scaleevent, потому что вы пытаетесь присвоить значение variable. Без global он присваивает v локальному variable, а затем не существует в savevalue

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.
Вы должны сделать это в две строки:

var = Widget(...)
var.grid(...)

Код

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...