Markieren und Auswählen von Text mit Python-Fluchen

8

Dies ist mein erster Beitrag, um einen Überlauf zu stapeln. Ich lauere seit Jahren auf dieser Seite nach Informationen und es ist immer hilfreich, also dachte ich mir, dass ich meine erste Frage posten würde.

Ich habe nach ähnlichen Beispielen gesucht, kann aber nichts finden.

Letztendlich versuche ich, einen einfachen Text zu schreiben, um in einem Textextraktionsprogramm False Positives und False Negatives zu finden. Das Falsch-Positiv-Modul ist eine einfache Ja / Nein-Auswahl, und die Anzeige von farbigem Text und die Verwendung von getch () ist einfach genug. Der falsch negative Teil wird jedoch schwierig.

Das möchte ich also tun:

  1. Zeigt eine Zeichenkette auf dem Bildschirm an (vergiss das Scrollen für jetzt .... ugh) Es wird nur eine Zeichenkette ohne Zeilenumbrüche sein.
  2. Der Benutzer sieht den Text und drückt 'h', um in den Markierungsmodus zu gelangen.
  3. Der Benutzer kann dann den Cursor steuern, um ihn über einen Teil des Textes zu bewegen (immer noch angezeigt) und "v" wählen, um mit der Hervorhebung zu beginnen (ich versuche, dies so nah wie möglich an vi zu legen)
  4. Der Benutzer verwendet dann die Steuertasten (Pfeile, hjkl), um den Cursor von einem Startpunkt zu einem Endpunkt zu bewegen und den Text auf dem Weg zu markieren. Dieser hervorgehobene Teil sollte ein Wort sein, das falsch negativ ist
  5. Der Benutzer drückt eine Taste (wahrscheinlich 'y'), und der ausgewählte Text ist farbig oder bleibt markiert, und der markierte Text wird in einer Variablen gespeichert, die ich später behandeln werde.
  6. Der Benutzer beendet den Hervorhebungsmodus und fährt fort.

Irgendwelche Ideen, um sogar zu starten? Ich versuche einfache Dinge wie Text auf dem Bildschirm zu halten und den Cursor herum zu bewegen, aber ohne Erfolg.

Ich kenne das curses.textpad.TextBox () Modul, aber es führt Bearbeitungen wie Einfügen und Löschen durch, was ich nicht machen möchte. Vielleicht gibt es eine Möglichkeit, es zu deaktivieren.

Ich habe andere Fragen, aber ich werde das für jetzt genau behalten.

Danke !!

Neal

Bearbeiten: Um genauer zu sein, suche ich nicht nach Hilfe, um das ganze Programm zu schreiben, helfe einfach, den Cursor über den angezeigten Text zu bewegen, ihn hervorzuheben, ihn auszuwählen und in einer Variablen zu speichern.

    
Neal 24.07.2011, 15:44
quelle

2 Antworten

12

Ich möchte diese Frage aktualisieren, falls jemand anderes im Internet danach sucht und auf diese Frage stößt.

Okay, die Antwort war eigentlich ziemlich einfach und erforderte das Lesen aller Funktionen, die in der Dokumentation von python curses aufgelistet sind.

Was ich gemacht habe, war eine Maschine mit drei Zuständen: Zustand 1: Normaler Modus (zeigt nur Text an), Status 2: Markierungsmodus, erlaubt dem Cursor, sich um das Fenster zu bewegen, und Zustand 3: Textmarkermodus, der nur begrenzt gibt Bewegung von links nach rechts über Texte und markiert den Text, wie es sich bewegt.

Um diese Aufgabe zu erledigen, bedarf es nur einiger einfacher Curses-Funktionsaufrufe.

Ich habe getrennte Fenster gemacht, aber ich nehme nur ein einziges Fenster zur Erklärung an.

Zeigen Sie Text in dem Fenster an, bleiben Sie bei:

%Vor%

Um den Cursor zu bewegen:

%Vor%

Sobald sich der Cursor über dem Startpunkt für die Hervorhebung befindet, drücken Sie 'v', um den Textmarker-Status einzugeben, und begrenzen Sie die Bewegung des Cursors, ändern Sie das Attribut des ausgewählten Textes:

%Vor%

Extrahiere diese Information jetzt von Anfang bis Ende

%Vor%

Das ist es! Ich habe auch einen anderen Weg versucht, das hervorgehobene Material zu speichern, das im Grunde die x, y-Koordinaten in den Index der Zeichenkette transformierte, die angezeigt wurde, die aber in Zeichenkettendarstellung (Zeilenumbrüche, Tabulatoren usw.) ausgegeben werden konnte einfach schwerer zu machen.

Wenn jemand Kommentare zu einer effizienteren / saubereren Methode hat, antworten Sie bitte!

    
Neal 27.07.2011, 17:32
quelle
0

Ich weiß nichts über ncurses, aber mit Tkinter oder einem der anderen GUI-Toolkits könnte es mit einem Canvas gemacht werden. Sie würden dann zuerst den Bildlaufbereich festlegen Binden Sie die "h" -Taste, so dass es eine Highlight-Variable auf True setzt, binden Sie einen Mausklick an eine Funktion, die den Startort abruft, Binde den linken und rechten Pfeil, um einen Buchstaben nach links oder rechts zu bewegen, bewege den Cursor und kehre die Farben des nächsten Buchstabens um und beobachte, wie viele Buchstaben du vom Startpunkt hast, was dir auch den Endort sagt, und Binden Sie "y", um den Text zu kopieren.

Es ist nicht so kompliziert, wie es scheint, da jeder Teil eine ziemlich einfache Funktion ist. All dies würde natürlich von der Schriftgröße abhängen, und ich würde vorschlagen, den Text mit einer festen Schriftart anzuzeigen, so dass jeder Buchstabe die gleiche Breite einnimmt. Noch einmal, ich kenne ncurses nicht, aber es wäre mit jedem Toolkit vergleichbar. Wenn Sie es umgehen können, so dass der Benutzer eine ganze Zeile mit einem Mausklick auswählen kann, macht es die Codierung viel einfacher. Poste zurück mit etwas Code, wenn du dich tatsächlich entscheidest, mit Tkinter oder wxPython zu gehen und etwas zusätzliche Hilfe zu benötigen.

    
Joe 24.07.2011 18:46
quelle

Tags und Links