gpt4 book ai didi

python - 拖动 Canvas 时获取当前值

转载 作者:太空宇宙 更新时间:2023-11-03 21:02:33 25 4
gpt4 key购买 nike

我正在尝试制作一个简单的纸牌游戏,例如纸牌游戏。我没有编码经验,所以如果这是一个简单的问题,请原谅我。

我想移动一些 Canvas 对象。新对象具有正确的值,但是当我拖动现有的卡片时,它显示错误的值(荷兰语 waarde)。我想将值(waarde)绑定(bind)到卡,但不知道该怎么做...

考虑标签、绑定(bind)、ID...

from tkinter import *
from random import randint

window = Tk()

deck = [1,2,3,4,5,6]

def pakkaart():
rand_card = randint(0,len(deck)-1)
global waarde
waarde = deck[rand_card]
deck.pop(rand_card)
global kaart
kaart = Canvas(window, width = 40, height = 40, bg='yellow')
kaart.place(x=50, y=50, anchor=CENTER)
kaart.create_text(20,20,text=(waarde))
kaart.bind("<B1-Motion>", drag)


def drag(event):
event.widget.place(x=event.x_root, y=event.y_root,anchor=CENTER)
print(waarde)

button1 = Button(window, text="Nieuwe Kaart", command=pakkaart)
button1.pack()

window.mainloop()

所以本质上是寻找一种将值绑定(bind)到 Canvas 的方法。

最佳答案

你的上面的代码工作正常,它显示了正确的值,但如果你愿意,你可以尝试这个

from tkinter import *
from random import randint

window = Tk()
ws = window.winfo_screenwidth()
hs = window.winfo_screenheight()
w = 500 # width for the Tk root
h = 300 # height for the Tk root
x = (ws / 2) - (w / 2)
y = (hs / 2) - (h / 2)

window.geometry('%dx%d+%d+%d' % (w, h, x, y))

deck = [1, 2, 3, 4, 5, 6]


def pick_card():
global waarde, kaart
rand_card = randint(0, len(deck)-1)
card_number = deck[rand_card]
deck.remove(card_number)
card = Canvas(window, width=40, height=40, bg='yellow')
card.place(x=50, y=50, anchor=CENTER)
card_number_text = card.create_text(20, 20, text=card_number, tags=card_number)
card.bind("<Button-1>", lambda event: get_number(event, card_number_text)) # or you can use: card.bind("<Button-1>", lambda event: print(card_number))
card.bind("<B1-Motion>", drag)


def drag(event):
# This is better for move a widget
cx = window.winfo_pointerx() - window.winfo_rootx()
cy = window.winfo_pointery() - window.winfo_rooty()
event.widget.place(x=cx, y=cy)

def get_number(event, number):
print(event.widget.itemcget(number, "text"))


button1 = Button(window, text="Generate Card", command=pick_card)
button1.pack()


window.mainloop()

我修改了 drag(event) 函数并编写了两种获取当前卡值的方法,为了存储它,您可以使用一些全局变量或创建一个class,第二个会更好

关于python - 拖动 Canvas 时获取当前值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55631970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com