如何创建比例尺,使用键盘箭头控制它,并使用 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()
我正在写一个基于 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()