PythonTkintercanvas.tag_绑定()

2024-10-05 13:27:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我也用Tkinter在Python上写了这段代码,在一天结束时,我可以点击一张图片(不是图片边框上有x,y的特定点,而是整个图片边框中的任何地方),然后点击屏幕上的任何地方,就可以将它移动到那里。在

我的代码:

from Tkinter import *
from PIL import ImageTk, Image

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
#Constants~
CLICKED = False

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
#Classes and Functions~
class App(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()

def asign_click(event):
    CLICKED = True
    print CLICKED
def new_destination(event, x, y, canvas, picture):
    if CLICKED == True:
        canvas.move(picture, x, y)

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
#Main~
myapp = App()
myapp.master.title("DA-I-SUKI!! <3~")
myapp.master.maxsize(2000, 1200)

my_picture = ImageTk.PhotoImage(Image.open("SOME_PICTURE"))
canvas = Canvas(height = my_picture.height(), width = my_picture.width())
canvas.pack(expand=1, fill=BOTH)
picture_pack = canvas.create_image(1130, 500, image = my_picture)

canvas.tag_bind(my_picture, '<1>', asign_click) 
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
myapp.mainloop()

基本上,我希望代码末尾的tag_bind能够正常工作,这样它就可以调用asign_click(),并将CLICKED的常量值更改为TRUE,然后添加另一个tag_bind(或任何其他有效的方法),这样我就可以单击屏幕上的任何位置并调用new_destination(),这样它就可以将图片移动到新的目的地。在

  • 我可能在new_destination()函数上设置了错误的参数,但仍在使用它。在

事先非常感谢。在


Tags: 代码selfmasternewmydef图片destination
1条回答
网友
1楼 · 发布于 2024-10-05 13:27:57

您只是在tag_unbind中有一点错误,根据effbot.org这个方法需要一个标记或一个id,但是您传递的是一个image对象。无论何时从画布对象调用create_...,返回时都会给出一个id。在

所以只需将canvas.tag_bind(...)行改为canvas.tag_bind(picture_pack, '<1>', asign_click)

相关问题 更多 >

    热门问题