В настоящее время я пишу программу, которая позволяет пользователю вводить список (например: 9,8,7,6,5,4,3,2,1), и программа должна отсортировать список с помощью сортировки выбора,Алгоритм сортировки работает нормально, но программа также должна иметь возможность печатать каждый новый список, созданный путем замены элементов.Однако в моем коде эти списки правильно выводятся на консоль, но неправильно отображаются в текстовом поле.
import tkinter as tk
from tkinter import messagebox
import time
class SelectionSort:
def __init__(self):
self.input_list = []
self.output_list = []
self.time = 1000
root.geometry("500x500")
root.resizable(False, False)
root.title("Selection-Sort")
self.titel = tk.Label(root, text="Selection - Sort", font = ("Courier", "19", "underline"), justify="center").pack()
self.text = tk.Text(root, height=22, width=60, relief="solid")
self.text.pack()
self.help_string = "Instructions:\n 1. Numbers have to be seperated using a comma.\n" \
" 2. Only integers are accepted.\n 3.You can view the text again by pressing the help button"
self.text.insert(tk.END, self.help_string)
self.print_button = tk.Button(root, text="Sort input!", command=lambda: self.retrieve_input(), width=68,
relief="groove", activebackground="dark grey").pack()
self.delete_button = tk.Button(root, text="Delete input", command=lambda: self.delete_text(), width=68,
relief="groove", activebackground="dark grey").pack()
self.help_button = tk.Button(root, text="Show help", command=lambda: self.show_help(), width=68,relief="groove",activebackground="dark grey").pack()
def retrieve_input(self):
input = self.text.get("1.0", "end-1c")
curr_value = ""
count = 0
for i in input:
try:
curr_value += i
if i == ",":
final = curr_value.replace(",", "")
self.input_list.append(int(final))
curr_value = ""
else:
if curr_value == "":
pass
except ValueError:
curr_value = ""
count += 1
print(self.input_list)
self.input_list.append(int(curr_value))
print(self.input_list)
if len(self.input_list) == 0:
self.delete_text()
self.text.insert(tk.END, "ERROR")
else:
self.text.delete("1.0", "end")
self.text.insert(tk.END, "Input list: ")
self.text.insert(tk.END, self.input_list)
return self.selection_sort()
def delete_text(self):
self.input_list = []
self.text.delete("1.0", "end")
def show_help(self):
messagebox.showinfo("Help", self.help_string )
def selection_sort(self):
sorted_lists = []
A = self.input_list
count = 1
for i in range(len(A)):
print(A)
self.time += 1000
min_idx = i
for j in range(i + 1, len(A)):
if A[min_idx] > A[j]:
min_idx = j
A[i], A[min_idx] = A[min_idx], A[i]
sorted_lists.append(A)
root.after(self.time, func=lambda:
self.text.insert(tk.END,"\n"+str(A) + "\n"))
count+=1
print("Sorted array")
for i in range(len(A)):
print("%d" % A[i]),
root = tk.Tk()
selection_sort = SelectionSort()
root.mainloop()