tkinter小部件拖动效果
刚接触不久,想做一个类似纸牌空挡接龙的游戏,需要一个拖动的效果,找遍全网都没找到.自己动手做了一个.下面写一个教程,不仅仅是代码,也包括思路,用到的函数和方法的解释, 以及我的一些学习新得。 适合tk新手学习。
先看代码,下面是1.0版
1.0版
import tkinter as tk
win = tk.Tk()
win.geometry("500x500")
tk.Button(win,text="AAAAA",bg="red").place(x=100,y=100)
def mov(event):
if event.widget.winfo_class() != "Button":return
_WinX = event.widget.nametowidget(".").winfo_x()+8
_WinY = event.widget.nametowidget(".").winfo_y()+30
_PX = event.x_root -_WinX
_PY = event.y_root - _WinY
event.widget.place(x=_PX ,y=_PY)
win.bind("<B3-Motion>", mov)
win.mainloop()
用到的函数和方法
第一步:判断触发对象是否button,如果否,啥也不执行
is 这次用is 来确定”.”窗口是不是我们指定的窗口.
event.widget 触发器传过来的event,返回触发的小部件w.
w.winfo_class() 返回w的类,比如tk或者button
第二步:算出鼠标相对位置
w.nametowidget(name) 用路径名字符串调用对象.name=”.” 表示w的根窗口
w.winfo_x(),w.winfo_y(), 对象相对于屏幕的基点坐标(左上角)
event.x_root,event.y_root