执行代码时空白的Tkinter窗口

时间:2019-02-19 21:15:49

标签: python python-3.x tkinter

所以我正在编码一个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()

2 个答案:

答案 0 :(得分:1)

您需要致电create_widgets才能显示任何内容。将您的主要方法更改为:

def main():
    root=Tk()
    root.title("Sortierverfahren")
    app = Application(root)
    app.create_widgets()
    root.mainloop()

答案 1 :(得分:0)

您对quickSortbubbleSort的呼叫被阻止。看看这个问题,看看如何调度不会阻塞UI的后台作业:

Python+Tkinter, how to run in background independant of tk frontend?