Пустое окно Tkinter при выполнении кода - PullRequest
0 голосов
/ 20 февраля 2019

Итак, я пишу программу tkinter, которая сортирует случайные числа с помощью разных алгоритмов сортировки.Вы должны вставить диапазон чисел для сортировки, затем нажать клавишу ввода, и она покажет вам несортированные числа справа, после того, как вы выберете алгоритм сортировки и нажмете сортировку, и она выведет отсортированные числа справа.Но моя проблема в том, что после запуска программы окно тинкер просто пустое.Я все еще новичок.

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 голосов
/ 20 февраля 2019

Вам нужно позвонить create_widgets, чтобы отобразить что-либо.Измените ваш основной метод на:

def main():
    root=Tk()
    root.title("Sortierverfahren")
    app = Application(root)
    app.create_widgets()
    root.mainloop()
0 голосов
/ 20 февраля 2019

Ваши звонки на quickSort или bubbleSort блокируются.Взгляните на этот вопрос, чтобы узнать, как отправлять фоновые задания, которые не блокируют пользовательский интерфейс:

Python + Tkinter, как запускать в фоновом режиме независимо от внешнего интерфейса tk?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...