Tkinter Eingabe

Fragen zu Tkinter.
Antworten
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

asdfgh hat geschrieben:Leider hängt es sich immer noch bei Betätigen des Buttons auf. Wie finde ich die Ursache davon?
Fehlermeldung?
Das Leben ist wie ein Tennisball.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Wenn sich der PC aufhängt, was ich bei dieser Aussage vermute, hat er eine
Endlosschleife die den Speicher zu spamt. Da wird es zu keiner Fehlermeldung
kommen ;)
BlackJack

In dem Fall fehlt allerdings der Quelltext in dem das Problem ist, denn im bisher gezeigten sehe ich keine solche Schleife.
asdfgh
User
Beiträge: 13
Registriert: Donnerstag 11. Dezember 2014, 14:59

Hier der aktuelle Quelltext:

Code: Alles auswählen

# -*- coding: UTF8 -*-

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk

ALPHABET = map(chr, [x for x in range(65, 91)])


class Vigenere(object):

    def __init__(self):
        self.root = tk.Tk()

        self.text = tk.Entry(self.root)
        self.code = tk.Entry(self.root)
        self.button = tk.Button(
            self.root, text="Codieren", command=self.button_clicked)
        self.ausgabe = tk.Label(self.root, text="Text und Codewort eingeben")

        self.text.pack()
        self.code.pack()
        self.button.pack()
        self.ausgabe.pack()

    def button_clicked(self):
        text = self.text.get()
        code = self.code.get()
        ergebnis = "".join(self.vigenere_anwenden(text, code))
        self.ausgabe.config(text=ergebnis)

    def vigenere_anwenden(self, text, code):
        return [
            self.verschieben(
                char_text, self.verschiebezahl_ermitteln(char_code))
            for char_text, char_code in zip(text, code)
        ]

    def verschieben(self, buchstabe, verschiebezahl):
        neu = chr(ord(buchstabe) + verschiebezahl)
        if neu not in ALPHABET:
            return chr(ord(neu) - 26)
        else:
            return neu

    def verschiebezahl_ermitteln(self, buchstabe):
        return ord(buchstabe) - 65

    def run(self):
        self.root.mainloop()


if __name__ == '__main__':
    vigenere = Vigenere()
    vigenere.run()
Zum Trennen von GUI und Logik muss ich die Logik-Funktionen außerhalb der Klasse schreiben und in der Klasse aufrufen?
BlackJack

@asdfgh: Ich sehe da keine Endlosschleife. Also weder im Code, noch hängt da irgendwas wenn ich das Programm ausführe.

Die Verschlüsselung ist allerdings fehlerhaft, da verschwindet Text wenn man Text/Code eingibt der nicht irgendwelchen Bedingungen entspricht.
Antworten