Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试将keybinding添加到使用工厂创建回调的按钮_Python_Python 3.x_Tkinter - Fatal编程技术网

Python 尝试将keybinding添加到使用工厂创建回调的按钮

Python 尝试将keybinding添加到使用工厂创建回调的按钮,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,因此,我有以下代码使用tkinter创建按钮网格: class Application(Frame):UP = 'Up' DOWN = 'Down' LEFT = 'Left' RIGHT = 'Right' END = "E" SEND = "S" STAR = "*" POUND = "#" def __init__(self, master=None): Frame.__init__(self, master)

因此,我有以下代码使用tkinter创建按钮网格:

class Application(Frame):UP = 'Up'
    DOWN = 'Down'
    LEFT = 'Left'
    RIGHT = 'Right'
    END = "E"
    SEND = "S"
    STAR = "*"
    POUND = "#"
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.grid()
        self.createWidgets()
    def createWidgets(self):
        self.arrowButtons = []
        self.arrowButtons += [Button(self, text=self.LEFT[0], command=self.buttonPressFactory(self.LEFT) )]
        self.arrowButtons += [Button(self, text=self.UP[0], command=self.buttonPressFactory(self.UP) )]
        self.arrowButtons += [Button(self, text=self.RIGHT[0], command=self.buttonPressFactory(self.RIGHT) )]
        self.arrowButtons += [Button(self, text=self.DOWN[0], command=self.buttonPressFactory(self.DOWN) )]

        self.send = Button(self, text=self.SEND, command=self.buttonPressFactory(self.SEND) )
        self.end = Button(self, text=self.END, command=self.buttonPressFactory(self.END) )
        self.send.grid(row=2,column=1)
        self.end.grid(row=2,column=3)
        self.numButtons = []

        for i in range(0,10):#make the number buttons
            self.numButtons.append(Button(self, text=str(i), command=self.buttonPressFactory(str(i))))

        self.starButton = Button(self, text=self.STAR, command=self.buttonPressFactory(self.STAR) )
        self.hashButton = Button(self, text=self.POUND, command=self.buttonPressFactory(self.POUND) )

        self.arrowButtons[0].grid(row=1,column=1)
        self.arrowButtons[1].grid(row=1,column=2)
        self.arrowButtons[2].grid(row=1,column=3)
        self.arrowButtons[3].grid(row=2,column=2)
        self.send.grid(row=2,column=1)
        self.end.grid(row=2,column=3)
        self.numButtons[1].grid(row=3,column=1)
        self.numButtons[2].grid(row=3,column=2)
        self.numButtons[3].grid(row=3,column=3)
        self.numButtons[4].grid(row=4,column=1)
        self.numButtons[5].grid(row=4,column=2)
        self.numButtons[6].grid(row=4,column=3)
        self.numButtons[7].grid(row=5,column=1)
        self.numButtons[8].grid(row=5,column=2)
        self.numButtons[9].grid(row=5,column=3)
        self.starButton.grid(row=6,column=1)
        self.numButtons[0].grid(row=6,column=2)
        self.hashButton.grid(row=6,column=3)

    def press(self, x):
        print(x)

    def buttonPressFactory(self, button):
        def buttonPress(*args):
            self.press(button)
        root.bind("<"+button+">", buttonPress)
        return buttonPress
if __name__ == '__main__':
    root = Tk()
    app = Application(root)                    
    app.master.title("stackoverflow is great")
    app.mainloop()  
类应用程序(框架):UP='UP'
向下=‘向下’
左=‘左’
右=‘右’
END=“E”
SEND=“S”
STAR=“*”
POUND=“#”
def uuu init uuu(self,master=None):
帧。\uuuu初始化(自,主)
self.grid()
self.createWidgets()
def createWidgets(自):
self.arrowButtons=[]
self.arrowButtons+=[按钮(self,text=self.LEFT[0],命令=self.buttonPressFactory(self.LEFT))]
self.arrowButtons+=[按钮(self,text=self.UP[0],命令=self.buttonPressFactory(self.UP))]
self.arrowButtons+=[按钮(self,text=self.RIGHT[0],命令=self.buttonPressFactory(self.RIGHT))]
self.arrowButtons+=[按钮(self,text=self.DOWN[0],命令=self.buttonPressFactory(self.DOWN))]
self.send=按钮(self,text=self.send,command=self.buttonPressFactory(self.send))
self.end=按钮(self,text=self.end,command=self.buttonPressFactory(self.end))
self.send.grid(行=2,列=1)
self.end.grid(行=2,列=3)
self.numButtons=[]
对于范围(0,10)内的i:#制作数字按钮
self.numButtons.append(按钮(self,text=str(i),command=self.buttonPressFactory(str(i)))
self.starButton=Button(self,text=self.STAR,command=self.buttonPressFactory(self.STAR))
self.hashButton=Button(self,text=self.POUND,command=self.buttonPressFactory(self.POUND))
self.arrowButtons[0]。网格(行=1,列=1)
self.arrowButtons[1]。网格(行=1,列=2)
self.arrowButtons[2]。网格(行=1,列=3)
self.arrowButtons[3]。网格(行=2,列=2)
self.send.grid(行=2,列=1)
self.end.grid(行=2,列=3)
self.numButtons[1]。网格(行=3,列=1)
self.numButtons[2]。网格(行=3,列=2)
self.numButtons[3]。网格(行=3,列=3)
self.numButtons[4]。网格(行=4,列=1)
self.numButtons[5]。网格(行=4,列=2)
self.numButtons[6]。网格(行=4,列=3)
self.numButtons[7]。网格(行=5,列=1)
self.numButtons[8]。网格(行=5,列=2)
self.numButtons[9]。网格(行=5,列=3)
self.starButton.grid(行=6,列=1)
self.numButtons[0]。网格(行=6,列=2)
self.hashButton.grid(行=6,列=3)
def压力(自身,x):
打印(x)
def按钮压力工厂(自身,按钮):
def按钮按(*参数):
按下(按钮)
root.bind(“,按钮按)
返回按钮按下
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
root=Tk()
app=应用程序(根)
app.master.title(“stackoverflow很棒”)
app.mainloop()
当我在buttonPressFactory中添加开始“root.bind(” 当我添加该行时,突然单击任何按钮似乎都会调用press(1),然后调用press(无论什么)。除了1、2、3、4和5(在numpad或numrow上)外,键绑定工作正常。如果删除该行,一切正常,但当然不能使用键绑定。我是tkinter的新手,所以我可能犯了一个明显的错误,尽管我的直觉告诉我可能犯了语法错误

如何在不破坏代码的情况下向代码添加键绑定?

'
是鼠标按钮1,
'1'
是文字字符()。因此不要在文字键上使用括号

下面是固定的
按钮pressFactory

def buttonPressFactory(self, button):
    def buttonPress(*args):
        self.press(button)
    eventname = '<' + button + '>' if len(button) > 1 else button
    root.bind(eventname, buttonPress)
    return buttonPress
def按钮压力工厂(self,按钮):
def按钮按(*参数):
按下(按钮)
如果len(按钮)>1个else按钮,则eventname=''
root.bind(eventname,buttonPress)
返回按钮按下
关于你的陈述

我是tkinter的新手,所以我可能犯了一个明显的错误 我的直觉告诉我这实际上是一个python错误

一个好的经验法则是,这几乎总是你的错误。这对每个人都是正确的。

我的意思是“我不懂python”的错误,而不是语言本身的错误。我同意,我的错误几乎总是一个好的经验法则