如何创建比例尺,使用键盘箭头控制它,并使用 tkinter 记录单个值

How to create a scale, control it with keyborad arrows, and log single value using tkinter

我正在写一个基于 pygame 的镜头 game/experiment,在游戏过程中的某个时刻,会弹出一个问题,要求参与者回忆他刚刚看到的东西的数量。 我正在尝试创建一个仅使用箭头左右移动的刻度(我们在 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()

我希望获得一个值,使颜色变化具有一个值,该值将记录在父主脚本中。 我还想更改允许键盘控制,而不仅仅是鼠标。

Tkinter 为此类操作提供事件和绑定。你可以看看here.

基本上您希望绑定事件 <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()))

请注意,我选择绑定到您的根 window tkTop 而不是您的 tkScale。如果您希望键绑定仅在您的 Scale 小部件具有焦点时起作用,您可以改为 tkScale.bind(...)

感谢@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()