为 canvas 按钮创建对 Tkinter 有影响的操作
Creating actions for canvas Button with the effect on Tkinter
我正在按照 and How do you create a Button on a tkinter Canvas? 作为在 Tkinter Canvas 上为 Button 创建一些操作的指南?这些操作有效,但 Button
的效果被冻结了。
代码:
import tkinter as tk
import tkinter.font as tkfont
main = tk.Tk()
font = tkfont.nametofont("TkDefaultFont")
label = "Click Me"
height = font.measure(label) + 4
width = font.metrics()['linespace'] + 4
canvas = tk.Canvas(main, height=height, width=width, background="SystemButtonFace", borderwidth=2, relief="raised")
canvas.create_text((4, 4), angle="90", anchor="ne", text=label, fill="SystemButtonText", font=font)
canvas.bind("<ButtonPress-1>", lambda ev: ev.widget.configure(relief="sunken"))
canvas.bind("<ButtonRelease-1>", lambda ev: ev.widget.configure(relief="raised"))
canvas.bind("<ButtonPress-1>", lambda ev: submit())
def submit():
print("1")
canvas.place(x=5, y=height + 10)
main.mainloop()
如果我删除 canvas.bind("<ButtonPress-1>", lambda ev: submit())
,则 Button
的效果有效,但还有 Submit
操作。
否则,如果像上面那样保留包含行 canvas.bind("<ButtonPress-1>", lambda ev: submit())
的代码,那么 Button
的效果将被冻结,但 Submit
动作有效。
我正在寻找一种方法来使 Button
和 Submit
操作的效果一起工作。请帮我。谢谢。
您需要在 <ButtonPress-1>
事件的第二个绑定上设置 add=True
,这样之前的绑定就不会被覆盖:
canvas.bind("<ButtonPress-1>", lambda ev: ev.widget.configure(relief="sunken"))
canvas.bind("<ButtonRelease-1>", lambda ev: ev.widget.configure(relief="raised"))
canvas.bind("<ButtonPress-1>", lambda ev: submit(), add=True) # added add=True
我正在按照 Button
的效果被冻结了。
代码:
import tkinter as tk
import tkinter.font as tkfont
main = tk.Tk()
font = tkfont.nametofont("TkDefaultFont")
label = "Click Me"
height = font.measure(label) + 4
width = font.metrics()['linespace'] + 4
canvas = tk.Canvas(main, height=height, width=width, background="SystemButtonFace", borderwidth=2, relief="raised")
canvas.create_text((4, 4), angle="90", anchor="ne", text=label, fill="SystemButtonText", font=font)
canvas.bind("<ButtonPress-1>", lambda ev: ev.widget.configure(relief="sunken"))
canvas.bind("<ButtonRelease-1>", lambda ev: ev.widget.configure(relief="raised"))
canvas.bind("<ButtonPress-1>", lambda ev: submit())
def submit():
print("1")
canvas.place(x=5, y=height + 10)
main.mainloop()
如果我删除 canvas.bind("<ButtonPress-1>", lambda ev: submit())
,则 Button
的效果有效,但还有 Submit
操作。
否则,如果像上面那样保留包含行 canvas.bind("<ButtonPress-1>", lambda ev: submit())
的代码,那么 Button
的效果将被冻结,但 Submit
动作有效。
我正在寻找一种方法来使 Button
和 Submit
操作的效果一起工作。请帮我。谢谢。
您需要在 <ButtonPress-1>
事件的第二个绑定上设置 add=True
,这样之前的绑定就不会被覆盖:
canvas.bind("<ButtonPress-1>", lambda ev: ev.widget.configure(relief="sunken"))
canvas.bind("<ButtonRelease-1>", lambda ev: ev.widget.configure(relief="raised"))
canvas.bind("<ButtonPress-1>", lambda ev: submit(), add=True) # added add=True