如何添加一个允许用户添加数字的GUI,然后单击sort将对代码进行排序



请帮助我的gui这里是代码:我希望能够让用户在输入字段中键入数字,并能够单击添加,然后按三个排序按钮,以便SELECTION sort对其进行排序。

title = "Selection Sort GUI"
A = [64, 25, 12, 22, 11]
# Traverse through all array elements
def sort(A):
for i in range(len(A)):
# Find the minimum element in remaining
# unsorted array
smallest = i
for j in range(i+1, len(A)):
if A[smallest] > A[j]:
smallest = j
# Swap the found minimum element with
# the first element
A[i], A[smallest] = A[smallest], A[i]
# Printing sorted array
print ("Sorted array:")
print (A)
master = tk.Tk()
master.title("Dans Selection Sort")
passwordEntry = tk.Entry(master)
passwordEntry.grid(row=0, column=1)
tk.Label(master, text='Enter Number: ', font='bold',).grid(row=0, column=0)
tk.Button(master, text='Add to Array', command=lambda: sort(A)).grid(row=1, column=0)
tk.Button(master, text='Sort', command=lambda: sort(A)).grid(row=1, column=1)

作为起点,我建议使用基于类的结构,借鉴https://stackoverflow.com/a/17470842/1942837

import tkinter as tk
class MainApplication(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
# init
self.passwordEntry = tk.Entry(self)
label = tk.Label(self, text='Enter Number: ', font='bold',)
btn_add = tk.Button(self, text='Add to Array',
command=self.add_to_array)
btn_sort = tk.Button(self, text='Sort',
command=self.sort)
# layout
self.passwordEntry.grid(row=0, column=1)
label.grid(row=0, column=0)
btn_add.grid(row=1, column=0)
btn_sort.grid(row=1, column=1)
# data
self.values = list()
def add_to_array(self):
# called when the user presses the Add to Array button
# (1) Fetch the Entry input:
entry = self.passwordEntry.get()
# (2) Add to our data list
self.values.append(entry)
print('values is now', self.values)
def sort(self):
# called when user presses Sort button
# no need for special function, just use the inbuilt sorted()
print('sorted', sorted(self.values))
if __name__ == "__main__":
master = tk.Tk()
master.title("Dans Selection Sort")
MainApplication(master).pack(side="top", fill="both", expand=True)
master.mainloop()

您忽略的一个关键概念是,您需要将要排序的数组保存在某个地方,这里作为一个名为self.values的列表。我将留给您在gui中显示它,这里我只是将其打印到控制台中。我没有使用自定义排序函数,而是使用内置的sorted函数。

作为类的替代方法是存储self。值作为全局列表,然后有两个函数访问该全局列表。

如果上面的代码有不清楚的地方,请告诉我。

已有A = sorted(A)或就地A.sort()

Rest只需要很少的更改。也许它需要更好的组织。

我用一个Label显示array,用另一个Label显示Sorted/Added

Button可以使用lambda将数组发送到函数,但它不能得到结果-它需要使用global将结果传递给外部变量-所以我跳过了lambda,我直接访问全局数组。


最小工作代码

import tkinter as tk
# --- classes ---
# ... empty ...
# --- functions ---
def sort():
data.sort()  # built-in sorting `in-place`
label_msg['text'] = "Sorted"
label_result['text'] = str(data)
def add():
data.append(int(entry.get()))
label_msg['text'] = "Added"
label_result['text'] = str(data)
# --- main ---
# - data - 
data = [64, 25, 12, 22, 11]
# - code - 
master = tk.Tk()
label = tk.Label(master, text='Enter Number: ')
label.grid(row=0, column=0)
entry = tk.Entry(master)
entry.grid(row=0, column=1)
button_add = tk.Button(master, text='Add to Array', command=add)
button_add.grid(row=1, column=0)
button_sort = tk.Button(master, text='Sort', command=sort)
button_sort.grid(row=1, column=1)
label_msg = tk.Label(master, text='')
label_msg.grid(row=2, column=0, columnspan=2)
label_result = tk.Label(master, text=str(data))
label_result.grid(row=3, column=0, columnspan=2)
master.mainloop()

最新更新