2 Stimmen

Python tkinter Entry widget zeigt Balkenzeichen anstelle von Zeilenumbrüchen

Ich kodiere eine sehr einfache Python Tkinter GUI, um ein Befehlszeilen-Python-Skript zu steuern.
Meine GUI wird auf einem Windows-Host laufen, und ich möchte, dass sie die mehrzeilige Klartextausgabe des Skripts anzeigt, die an die GUI als String zurückgegeben wird und - natürlich - Zeilenumbrüche enthält ( \n Zeichen).

Ich füge also ein Text-Widget in die GUI ein, und wenn mein Skript - zum Beispiel - eine Ausgabe liefert, die mit dieser Teilzeichenkette beginnt:

    RESULT STATUS: OK- Service is currently running\n\nDETAILS: ...

enthält der angezeigte Text schwarze vertikale Balken ( | ), wann immer es eine \n Zeilenumbruchzeichen.

Die Linien sind korrekt unterbrochen, aber diese seltsamen Balken lassen mich vermuten, dass die \n Das Zeichen für den Zeilenumbruch wird nicht korrekt dekodiert, und ich möchte nicht, dass die Balken in meiner Ausgabe angezeigt werden.

Irgendeine Idee, wie man Tkinter dazu bringt, Zeilenenden korrekt anzuzeigen? Vielen Dank im Voraus.

Code

Dies ist der Arbeitsablauf für meine GUI:

  1. Ich klicke auf eine Schaltfläche, die die CallMe()-Callback-Funktion aufruft
  2. Die Funktion callMe() analysiert die von einem Entry-Widget kommenden Argumente und ruft dann das Python-Befehlszeilenskript auf
  3. Das Skript gibt die oben genannte Zeichenkette zurück, und diese wird vom Callback verwendet, um den Text des Text-Widgets zu aktualisieren

Hier ist der Code:

#init the GUI elements and the Text widget
from Tkinter import *
root = Tk()     
top = Frame(root)
outputFrame = Frame(top)
outputFrame.pack(side='top', padx=20, pady=20)
outputTextArea = Text(outputFrame, yscrollcommand=scrollbar.set, width=150, height=40)
outputTextArea.pack(side='left', expand=YES, fill='both')

#callback executed when the button is clicked
def callMe()

    #get parameters
    # .....

    #command line execution script execution
    process = subprocess.Popen(command_line, stdout=subprocess.PIPE, shell=True)

    #get script output
    matr = process.stdout.readlines()  

    #from a list of strings to a single string
    output = "".join(matr)

    #write output into the Text widget
    outputTextArea.insert(0.0, output)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X