Как создать масштаб, управлять им с помощью клавиш со стрелками и регистрировать одно значение с помощью tkinter - PullRequest
0 голосов
/ 20 октября 2019

Я пишу игру / эксперимент, основанный на шот-пигме, в определенный момент во время игры должен появиться вопрос с просьбой вспомнить количество вещей, которые он только что видел. Я пытаюсь создать шкалу, которая бы двигалась влево и вправо, используя только стрелки (мы работаем в сканере fMRI, поэтому мыши нет), и регистрировала бы одно значение из шкалы, используя 3-е нажатие кнопки (скажем, стрелка вверх).

import tkinter

def quit():
    global tkTop
    colorchange = float(var.get())
    tkTop.destroy()


tkTop = tkinter.Tk()
tkTop.geometry('300x200')

tkButtonQuit = tkinter.Button(tkTop, text="Enter", command=quit)
tkButtonQuit.pack()

tkScale = tkinter.Scale(tkTop, from_=0, to=5, orient=tkinter.HORIZONTAL, variable = var)
tkScale.pack(anchor=tkinter.CENTER)

tkinter.mainloop()

Я хочу получить одно значение, имеющее одно значение для смены цвета, которое будет записано в родительский основной скрипт. Я также хотел бы изменить разрешение для управления с клавиатуры, а не только мыши.

Ответы [ 2 ]

1 голос
/ 20 октября 2019

Tkinter предоставляет события и привязки для подобных операций. Вы можете взглянуть на здесь .

По сути, вы хотите связать события <Left> и <Right>, чтобы уменьшить или увеличить ваш Scale виджет. Это может быть что-то вроде этого:

tkScale = tkinter.Scale(tkTop, from_=0, to=5, orient=tkinter.HORIZONTAL)
tkScale.pack(anchor=tkinter.CENTER)

tkTop.bind("<Left>", lambda e: tkScale.set(tkScale.get()-1))
tkTop.bind("<Right>", lambda e: tkScale.set(tkScale.get()+1))
tkTop.bind("<Up>", lambda e: print (tkScale.get()))

Обратите внимание, что я решил связать ваше корневое окно tkTop вместо вашего tkScale. Если вы хотите, чтобы привязка клавиш работала только тогда, когда у вашего виджета Scale есть фокус, вы можете изменить его на tkScale.bind(...).

0 голосов
/ 20 октября 2019

Спасибо за @Henry Yik. Вот так я и закончил:

import tkinter

def quit():
    global tkTop
    tkTop.destroy()

def savepick(event):
    global colornumber
    colornumber = tkScale.get()
    print (colornumber)
    return (colornumber)

def doscale(tkScale):
    savepick(tkScale)
    quit()


tkTop = tkinter.Tk()
tkTop.geometry('300x200')

tkButtonQuit = tkinter.Button(tkTop, text="Enter", command=quit)
tkButtonQuit.pack()

tkScale = tkinter.Scale(tkTop, from_=0, to=5, orient=tkinter.HORIZONTAL)
tkScale.pack(anchor=tkinter.CENTER)

tkTop.bind("<Left>", lambda e: tkScale.set(tkScale.get()-1))
tkTop.bind("<Right>", lambda e: tkScale.set(tkScale.get()+1))
tkTop.bind("<Up>", doscale)

tkinter.mainloop()
...