Advertisement
Guest User

Untitled

a guest
Jun 15th, 2023
401
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.92 KB | Source Code | 0 0
  1. from tkinter import *
  2. from tkinter import ttk
  3. import random
  4. from colors import *
  5.  
  6. # Importing algorithms
  7.  
  8. from algorithms.selectionSort import selection_sort
  9. from algorithms.insertionSort import insertion_sort
  10. from algorithms.mergeSort import merge_sort
  11.  
  12.  
  13.  
  14. # Main window
  15. window = Tk()
  16. window.title("Sorting Algorithms Visualization")
  17. window.maxsize(1000, 700)
  18. window.config(bg = WHITE)
  19.  
  20.  
  21. algorithm_name = StringVar()
  22. speed_name = StringVar()
  23. data = []
  24. algo_list = ['Insertion Sort', 'Selection Sort', 'Merge Sort',]
  25. speed_list = ['Fast', 'Medium', 'Slow']
  26.  
  27.  
  28. # Drawing the numerical array as bars
  29. def drawData(data, colorArray):
  30.     canvas.delete("all")
  31.     canvas_width = 800
  32.     canvas_height = 400
  33.     x_width = canvas_width / (len(data) + 1)
  34.     offset = 4
  35.     spacing = 2
  36.     normalizedData = [i / max(data) for i in data]
  37.  
  38.     for i, height in enumerate(normalizedData):
  39.         x0 = i * x_width + offset + spacing
  40.         y0 = canvas_height - height * 390
  41.         x1 = (i + 1) * x_width + offset
  42.         y1 = canvas_height
  43.         canvas.create_rectangle(x0, y0, x1, y1, fill=colorArray[i])
  44.  
  45.     window.update_idletasks()
  46.  
  47.  
  48. # Randomly generate array
  49. def generate():
  50.     global data
  51.  
  52.     data = []
  53.     for i in range(0, 100):
  54.         random_value = random.randint(1, 150)
  55.         data.append(random_value)
  56.  
  57.     drawData(data, [BLUE for x in range(len(data))])
  58.  
  59.  
  60. def set_speed():
  61.     if speed_menu.get() == 'Slow':
  62.         return 0.3
  63.     elif speed_menu.get() == 'Medium':
  64.         return 0.1
  65.     else:
  66.         return 0.001
  67.  
  68.  
  69. def sort():
  70.     global data
  71.     timeTick = set_speed()
  72.    
  73.     if algo_menu.get() == 'Selection Sort':
  74.         selection_sort(data, drawData, timeTick)
  75.     elif algo_menu.get() == 'Insertion Sort':
  76.         insertion_sort(data, drawData, timeTick)
  77.     elif algo_menu.get() == 'Merge Sort':
  78.         merge_sort(data, 0, len(data)-1, drawData, timeTick)
  79.        
  80.  
  81.  
  82. ### User interface ###
  83. UI_frame = Frame(window, width= 900, height=300, bg=WHITE)
  84. UI_frame.grid(row=0, column=0, padx=10, pady=5)
  85.  
  86. l1 = Label(UI_frame, text="Algorithm: ", bg=WHITE)
  87. l1.grid(row=0, column=0, padx=10, pady=5, sticky=W)
  88. algo_menu = ttk.Combobox(UI_frame, textvariable=algorithm_name, values=algo_list)
  89. algo_menu.grid(row=0, column=1, padx=5, pady=5)
  90. algo_menu.current(0)
  91.  
  92. l2 = Label(UI_frame, text="Sorting Speed: ", bg=WHITE)
  93. l2.grid(row=1, column=0, padx=10, pady=5, sticky=W)
  94. speed_menu = ttk.Combobox(UI_frame, textvariable=speed_name, values=speed_list)
  95. speed_menu.grid(row=1, column=1, padx=5, pady=5)
  96. speed_menu.current(0)
  97.  
  98. canvas = Canvas(window, width=800, height=400, bg=WHITE)
  99. canvas.grid(row=1, column=0, padx=10, pady=5)
  100.  
  101. b1 = Button(UI_frame, text="Sort", command=sort, bg=LIGHT_GRAY)
  102. b1.grid(row=2, column=1, padx=5, pady=5)
  103.  
  104. b3 = Button(UI_frame, text="Generate Array", command=generate, bg=LIGHT_GRAY)
  105. b3.grid(row=2, column=0, padx=5, pady=5)
  106.  
  107.  
  108. window.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement