Python 如何交换两个对象';tkinter画布上的位置
我正在使用tkinter使用不同矩形的高度开发一个排序可视化程序。我能够随机化每个矩形的高度,但现在我一直在试图找出如何切换两个矩形的位置。在开始尝试实现排序之前,我需要弄清楚如何做到这一点 以下是我到目前为止的情况:Python 如何交换两个对象';tkinter画布上的位置,python,python-3.x,tkinter,tkinter-canvas,algorithm-animation,Python,Python 3.x,Tkinter,Tkinter Canvas,Algorithm Animation,我正在使用tkinter使用不同矩形的高度开发一个排序可视化程序。我能够随机化每个矩形的高度,但现在我一直在试图找出如何切换两个矩形的位置。在开始尝试实现排序之前,我需要弄清楚如何做到这一点 以下是我到目前为止的情况: import tkinter as tk import random window = tk.Tk() window.title('Sorting') window.geometry('600x400') xstart = 5 xend = 15 canvas = tk.Ca
import tkinter as tk
import random
window = tk.Tk()
window.title('Sorting')
window.geometry('600x400')
xstart = 5
xend = 15
canvas = tk.Canvas(window, width='600', height='400')
canvas.pack()
barList = []
lengthList = []
for x in range(1,60):
randomY = random.randint(1,390)
bar = canvas.create_rectangle(xstart,randomY,xend,395, fill='red')
barList.append(bar)
xstart += 10
xend +=10
for bar in barList:
x = canvas.coords(bar)
length = x[3]-x[1]
lengthList.append(length)
window.mainloop()
下面是一个小示例,让您开始:单击“交换”按钮时,它交换位置10处的矩形和位置20处的矩形
import tkinter as tk
import random
def swap_two_pos(pos_0, pos_1):
"""This does the graphical swapping of the rectangles on the canvas
by moving one rectangle to the location of the other, and vice versa
"""
x_00, _, x_01, _ = canvas.coords(pos_0)
x_10, _, x_11, _ = canvas.coords(pos_1)
# moves each rectangle to the x position of the other; y remains unchanged
canvas.move(pos_0, x_10-x_00, 0)
canvas.move(pos_1, x_01-x_11, 0)
def random_sort():
"""Not a sort yet, but you have the bare bones operations
so the swap is executed
"""
pos_0 = barList[10]
pos_1 = barList[20]
swap_two_pos(pos_0, pos_1)
# it is necessary to swap the values in the list too
barList[10], barList[20] = barList[20], barList[10]
window = tk.Tk()
window.title('Sorting')
window.geometry('600x400')
# button to command the swap
tk.Button(window, text='swap', command=random_sort).pack()
xstart = 5
xend = 15
canvas = tk.Canvas(window, width='600', height='400')
canvas.pack()
barList = []
lengthList = []
for x in range(1,60):
randomY = random.randint(1,390)
bar = canvas.create_rectangle(xstart, randomY, xend, 395, fill='red')
barList.append(bar)
xstart += 10
xend +=10
for bar in barList:
x = canvas.coords(bar)
length = x[3]-x[1]
lengthList.append(length)
# hardcoded colors so the swap is more visual
canvas.itemconfig(barList[10], fill='blue')
canvas.itemconfig(barList[20], fill='yellow')
window.mainloop()
你想在哪里交换矩形位置?@alec_a我不想,我尝试了一些想法,但最后我想不出如何为thateffbot.org实现任何东西:-
coords()
来获取和设置位置。我建议使用比a
、b
、c
和d
更有用的变量名。使用x1
、y1
、x2
、和y2
(或类似的东西)可以让代码更容易解释。是的,谢谢你的建议@Bryan,我本来打算改变的,但不知怎么忘了。非常感谢你,这正是我需要理解的