Как передать новое значение, полученное со шкалой, в другую функцию? - PullRequest
0 голосов
/ 06 января 2019

Я на Python2.7 и пытаюсь передать значение, полученное из scale, в другую функцию, которая должна реагировать на щелчок.

from tkinter import * 

fenetre = Tk()

def other(ev):
    m=2
    l=3
    vol_piano=maj()
    print(vol_piano)

def maj(newvalue):
    vol_piano = newvalue
    print(vol_piano)
    return vol_piano

value = DoubleVar()
scale = Scale(fenetre, variable=value, orient ='vertical', from_ = 0, to= 100,
              resolution = 1, tickinterval= 5, length=400, label='Volume Piano',command=maj)
scale.pack(side=RIGHT)

canvas = Canvas(fenetre, width=100, height=400, bg="white")
curseur1 = canvas.create_line(0, 0, 0, 0)
canvas.pack(side=LEFT)
canvas.bind("<Button-1>", other)

fenetre.mainloop()

Проблема в том, что я не могу использовать return, потому что моя функция maj() имеет в аргументе новое значение, полученное с помощью масштаба.

1 Ответ

0 голосов
/ 06 января 2019

Вы можете сделать vol_piano глобальной переменной. Обновляйте его значение всякий раз, когда Scale перемещается внутри функции maj(). При каждом нажатии на холст просто распечатайте значение vol_piano.

import tkinter as tk

fenetre = tk.Tk()

<b>vol_piano = None</b>

def other(ev):
    <b>global vol_piano</b>
    print(vol_piano)

def maj(newvalue):
    <b>global vol_piano
    vol_piano = newvalue</b>

value = tk.DoubleVar()
scale = tk.Scale(fenetre, variable=value, orient ='vertical', from_ = 0, to= 100,
              resolution = 1, tickinterval= 5, length=400, label='Volume Piano',command=maj)
scale.pack(side="right")

canvas = tk.Canvas(fenetre, width=100, height=400, bg="white")
canvas.pack(side="left")
canvas.bind("<Button-1>", other)

fenetre.mainloop()
...