使用tkinter,用直方图动画表示排序过程的python代码

本文通过Python的tkinter库,展示了如何用直方图动画形式呈现冒泡排序的过程,详细代码如下。

一,冒泡排序


代码:

from tkinter import *
import time
import random
listLength = 50
height = 600
width = 800

class BubbleSort():
    def __init__(self, mywin):
        self.win = mywin
        self.list = [x for x in range(1, listLength+1)]
        self.barwidth = (width-20)//listLength
        self.height = (height-30)//listLength
        self.left= (width-listLength*self.barwidth)//2
        self.reset()

    def reset(self):
        random.shuffle(self.list)
        self.drawRect(-1,50)

    def drawRect(self,move,flag):

        self.win.canvas.delete("line")
        for i in range(len(self.list)):
            color = "white"
            if i == move:
                color = "RED"
            if i > flag:
                color = "BLUE"
            self.win.canvas.create_rectangle(i * self.barwidth+self.left, height-10,
                                  (i+1) * self.barwidth+self.left,
                                  height-10-self.height * self.list[i],
                                  fill=color, tag="line")
            self.win.canvas.create_text(i * self.barwidth+self.left+self.barwidth/2,
                                  height-18-self.height * self.list[i],
                                  text=str(self.list[i]), tag="line")
        self.win.canvas.after(100)
        self.win.canvas.update()

    def sort(self):

        for i in range(0,len(self.list)-1):
            for j in range(0,len(self.list)-i-1):
                if self.list[j] > self.list[j+1]:
                    temp = self.list[j]
                    self.list[j] = self.list[j+1]
                    self.list[j+1] = temp
                    self.drawRect(j+1,len(self.list)-i-1)


class SortWin():
    def __init__(self):
        self.win = Tk()
        self.win.title("Bubble Sort")  # Set a title

        self.canvas = Canvas(self.win, bg="white", width=width, height=height)
        self.canvas.pack()

        self.frame = Frame(self.win)
        self.frame.pack()
        self.label = Label(self.frame, text="冒泡排序法")
        self.label.pack(side=LEFT)
        self.btStep1 = Button(self.frame, text="Begin", command=self.begin)
        self.btStep1.pack(side=LEFT)
        self.btStep2 = Button(self.frame, text="Reset", command=self.reset)
        self.btStep2.pack(side=LEFT)


    def begin(self):
        self.bubbleSort.sort()

    def reset(self):
        self.bubbleSort.reset()

    def show(self):
        self.bubbleSort = BubbleSort(self)
        self.win.mainloop()

main = SortWin()
main.show()


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值