0

我正在编写一个基于射击 pygame 的游戏/实验,在游戏过程中的某个时刻会弹出一个问题,要求参与者回忆他刚刚看到的数字。我正在尝试创建一个仅使用箭头左右移动的刻度(我们在 fMRI 扫描仪中运行,因此没有鼠标),并会使用第三个按钮从刻度中记录一个值(比如向上箭头) .

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

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

4

2 回答 2

1

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(...)改为。

于 2019-10-20T06:11:36.830 回答
0

谢谢@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()
于 2019-10-20T18:31:58.490 回答