【问题标题】:tkinter bindo to a button or change the command of a bindtkinter bindo 到按钮或更改绑定命令
【发布时间】:2022-01-12 15:37:15
【问题描述】:

我制作了一个游戏,在游戏结束时,我更改了按钮调用的命令。

我想知道是否有办法将bind 链接到按钮而不是命令,或者我是否可以更改bind 调用的命令。

这是我的按钮代码:

# create the button
self.but = Button(win, text="Submit", command=lambda: self.check_input(win))
self.but.grid(row=10, column=2, columnspan=3, sticky="NEWS")
win.bind("<enter>", self.check_input(win))

# change the button command
self.but["command"] = lambda: self.next(win, self.game_init)
self.but["text"] = "PLAY AGAIN!"

【问题讨论】:

  • 如果您将密钥绑定到lambda e: self.but.invoke(),则密钥将执行 Button 所做的任何操作,即使稍后发生更改。

标签: python tkinter


【解决方案1】:

如果你的函数在绑定小部件时不使用 tkinter 传递的Event,那么它相当简单:

def check_input(self,win,event=None):
    ....
    ....

self.but = Button(win, text="Submit", command=lambda: self.check_input(win))
....
win.bind("<enter>", lambda e: self.check_input(win,e))

虽然始终遵循按钮命令的更简单和动态的方式是(就像 jasonharper 所说),但您根本不能使用 e,即使是由给定事件触发:

win.bind("<enter>", lambda e: self.but.invoke())

一个例子来说明对按钮的bindcommand 使用相同的功能:

from tkinter import *

root = Tk()

def func(win,e=None):
    if e is not None:
        print(f'Triggered by the hitting the {e.keysym} key')
    else:
        print('Triggered by the pressing button')


but = Button(root,text='Click me',command=lambda: func(root))
but.pack()

root.bind('<Return>',lambda e: func(root,e))

root.mainloop()

也是提一下的好时机,您的事件是错误的,您的意思是'&lt;Return&gt;'(输入键)或'&lt;Enter&gt;'(当您使用光标输入小部件的边界时)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2013-10-09
    • 2010-09-09
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    相关资源
    最近更新 更多