繁体   English   中英

无法在Tkinter中绑定按键

[英]unable to bind keypress in tkinter

我浏览了大约12篇有关Tkinter,绑定按键事件和画布小部件的帖子,但是我所阅读的解决方案都没有改变程序中的任何内容。 GUI当前与Button-1一起用作事件,但是我需要它可以通过键盘操作。 我尝试使用各种键和字母。 我还尝试了self.c.focus_set(),当我尝试将事件绑定到画布或框架时,此方法不起作用。 这是我的代码:

from Tkinter import *

class App:
    def __init__(self, master):
        self.parent = master
        frame = Frame(master)
        screen_width, screen_height = master.winfo_screenwidth(), master.winfo_screenheight()
        frame.configure(background='black')
        frame.place(x=0,y=0,width=screen_width,height=screen_height)
        master.overrideredirect(1)


        h = .8*screen_height
        self.c = Canvas(frame, width=h, height=h, bd=0, highlightthickness=0, bg='black')
        self.c.place(relx=0.5, rely=0.5, anchor=CENTER)
        radius = 10
        self.c.update_idletasks()

        hCanvas = (self.c.winfo_height())
        offset = int(float(.4*hCanvas))
        self.c.create_oval(hCanvas/2-radius, hCanvas/2-radius, hCanvas/2+radius, hCanvas/2+radius, fill='white', outline='white')

        self.c.focus_set()
        self.c.update_idletasks()
        self.c.bind('<Key>', lambda event, arg=[radius]: self.create_stim(event, arg))

    def create_stim(self, event, args):
        print('create stim')


if __name__ == "__main__":
    root = Tk()
    root.attributes('-fullscreen', True)
    app=App(root)

    root.update()
    root.mainloop()

预先感谢您的帮助!

  • 编辑以反映martineau建议的更改。

当前,当我以这种方式运行程序时,我不再处于全屏状态,无法单击窗口来选择它,并且每次按键盘上的键时都会收到错误提示。 如果将root.attributes('-fullscreen',True)放在app = App(root)之后,那么我将获得全屏GUI,然后可以单击它,并且每次按键时都会再次收到错误提示。 我的计算机(MacBook Pro,在OS X Yosemite,10.10.4上运行)上运行的python(2.7.10)版本是否可能存在问题? 我应该下载python 3吗?

这似乎是Tkinter在OSX上的局限性。 当您调用master.overrideredirect(1) ,似乎关闭了master.overrideredirect(1)处理键盘事件的功能。 如果您忽略对overrideredirect的调用,您的代码将开始工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM