所以我正在编码一个tkinter程序,该程序使用不同的排序算法对随机数进行排序。您必须插入要排序的数字范围,然后按Enter键,它会在右侧显示未排序的数字,选择排序算法并按sort后,它将在右侧打印出已排序的数字。但是我的问题是,执行程序后,修补程序窗口只是空白。我还是一个初学者。
import random
try:
from Tkinter import *
except ImportError:
from tkinter import *
MAX = 999
MIN = 0
class Application(Frame):
def __init__(self, master):
Frame.__init__(self, master)
master.minsize(width=600, height=400)
self.grid()
def create_widgets(self):
Label(self,
text="Dieses Programm sortiert die angegebene Anzahl von Zahlen nach einem Sortierverfahren."
).grid(row=0, column=0, columnspan=2, sticky=W)
Label(self,
text="Wie viele Zahlen wollen Sie sortieren?"
).grid(row=2, column=0, columnspan=2, sticky=W)
Label(self,
text="Hier sind die sortierten Zahlen"
).grid(row=0, column=4, columnspan=2, sticky=W)
Label(self,
text="Welches Sortierverfahren wollen sie nutzen?"
).grid(row=4, column=0, columnspan=2, sticky=W)
self.anzahl_ent=Entry(self)
self.anzahl_ent.grid(row=3, column=1, sticky=W)
Button(self,
text="Eingabe",
command=self.get_anzahl
).grid(row=3, column=2, sticky=W)
self.v=IntVar()
Radiobutton(self,
text="Bubblesort",
variable=v,
value=1
).grid(row=5,column=1, sticky=W)
Radiobutton(self,
text="Quicksort",
variable=v,
value=2
).grid(row=6, column=1, sticky=W)
Button(self,
text="SORTIEREN",
command=self.Zahlsortieren
).grid(row=7, column=1, sticky=W)
self.sortierteZahlen_txt = Text(self, width=50, heigh=200)
self.sortierteZahlen_txt.grid(row=2, column=4, sticky=W)
def get_anzahl(self):
self.anzahl=int(self.anzahl_ent.get())
self.ranZahlen()
def ranZahlen(self):
self.liste = [random.randrange(MIN, MAX) for _ in xrange(anzahl)]
self.zahlen_ausgeben(self.liste)
def Zahlsortieren(self):
if v==2:
def partition(arr, low, high):
i = (low - 1)
pivot = arr[high]
for j in range(low, high):
if arr[j] <= pivot:
i = i + 1
arr[i], arr[j] = arr[j], arr[i]
arr[i + 1], arr[high] = arr[high], arr[i + 1]
return (i + 1)
def quickSort(arr, low, high):
if low < high:
pi = partition(arr, low, high)
quickSort(arr, low, pi - 1)
quickSort(arr, pi + 1, high)
n = len(liste)
quickSort(liste, 0, n - 1)
for i in range(n):
self.zahlenliste1=print("%d" % liste[i])
self.zahlen_ausgeben(self.zahlenliste1)
return
elif v==1:
def bubbleSort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n - i - 1):
# traverse the array from 0 to n-i-1
# Swap if the element found is greater
# than the next element
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
bubbleSort(liste)
for i in range(len(liste)):
self.zahlenliste2=print("%d" % liste[i])
self.zahlen_ausgeben(self.zahlenliste2)
return
def zahlen_ausgeben(self, message):
self.sortierteZahlen_txt.delete(0.0, END)
self.sortierteZahlen_txt.insert(0.0, message)
def main():
root=Tk()
root.title("Sortierverfahren")
app = Application(root)
root.mainloop()
main()
答案 0 :(得分:1)
您需要致电create_widgets
才能显示任何内容。将您的主要方法更改为:
def main():
root=Tk()
root.title("Sortierverfahren")
app = Application(root)
app.create_widgets()
root.mainloop()
答案 1 :(得分:0)
您对quickSort
或bubbleSort
的呼叫被阻止。看看这个问题,看看如何调度不会阻塞UI的后台作业:
Python+Tkinter, how to run in background independant of tk frontend?