2016-07-23 2 views
1

OS: Windows 8.1 Python 3.5tkinter Überprüfen Sie, ob Text-Widget leer

In Tkinter

ich viel Code gefunden zu überprüfen, ob ein Eingabefeld leer ist. Aber wenn ich versuche, dieselbe Methode für ein Text-Widget anzuwenden, funktioniert es nicht. Es sieht so aus, als hätte das Text-Widget einen \ n-Charakter und das könnte das Problem sein.

Haben Sie eine Idee, wie Sie diese Validierung durchführen?

+0

Warum verwenden Sie nicht "get" -Methode? –

Antwort

0

Tkinter fügt am Ende der Daten im Widget automatisch einen Zeilenumbruch hinzu. Um zu sehen, ob das Widget leer ist, vergleichen Sie den Index direkt vor diesem Newline mit dem Startindex; Wenn sie identisch sind, ist das Widget leer.

Sie können den Index "end-1c" (oder "end - 1 char") verwenden, um den Index des Zeichens unmittelbar vor dem abschließenden Zeilenvorschub darzustellen. Sie können die Methode compare des Text-Widgets verwenden, um den Vergleich durchzuführen.

if text.compare("end-1c", "==", "1.0"): 
    print("the widget is empty") 

Angenommen, Sie nicht Hunderte von Megabytes in Ihrem Widget haben, können Sie auch den Inhalt erhalten und die Länge auf Null vergleichen. Dies macht eine temporäre Kopie der Daten im Widget, die in den meisten Fällen ziemlich harmlos sein sollte. Auch hier möchten Sie nicht den abschließenden Zeilenumbruch erhalten:

if len(text.get("1.0", "end-1c")) == 0: 
    print("the widget is empty") 
+0

Daumen hoch für die 'compare' Methode. Und ist die Methode "get" in diesem Fall keine gute Idee? –

+0

@ParvizKarimli: Sie können 'Get' verwenden, wenn Sie möchten. Es erstellt eine Kopie der Daten, also wird es langsamer und speicherintensiver als der Vergleich. In den meisten Fällen ist der Unterschied in der Leistung nicht spürbar, es sei denn, Sie laden Hunderte oder Tausende von Megabyte in das Widget. –

+0

Ja, das stimmt, das weiß ich. Ich dachte nur, etwas stimmt nicht mit "Get", also hat @ user2067030 es nicht versucht. Darum habe ich gefragt. Danke für die Klärung meiner Frage. –