Ich habe den folgenden Code, mit dem Sie einen Textblock nach oben und unten scrollen können. Bei jedem Scrollen (d. H. Mit einer Benutzereingabe) wird das Pad wie erwartet aktualisiert. Bevor jedoch die erste Taste gedrückt wird, wird nichts angezeigt, obwohl ich pad.refresh () genauso wie nach jeder Benutzereingabe anrufe.
Mein Code sieht so aus:
%Vor%Bearbeiten: Änderungen, die im Code angezeigt werden, was versucht wurde (+, ++, -)
Es scheint die (AFAIK undokumentierte) Notwendigkeit zu sein, den stdscr einmal zu aktualisieren, d. h. Aufruf stdscr.refresh()
, bevor alles wie erwartet funktioniert. Ich habe das in dein Beispiel eingebaut (was ich vorher überhaupt machen musste - siehe unten):
Ich hoffe, das löst dein Problem!
Einige Anmerkungen:
Für die Zukunft empfehle ich Ihnen, die curses.wrapper(main)
-Funktion zu verwenden, die die curses-Umgebung einrichtet und Ihre main(stdscr)
-Methode mit dem Parameter stdscr
as aufruft. Es sorgt auch dafür, dass Verwünschungen angemessen beseitigt werden, was ein defektes Terminal verhindert, wenn in Ihrem Code etwas schief geht. Vielleicht möchten Sie das hilfreiche Tutorial von Kuchling und Raymond zur Verwendung des Python Fluch Paket.
Geben Sie ein reproduzierbares Beispiel an. Dein enthält Variablen wie self.all_result
, wo ich Vermutungen anstellen musste, um deine Frage zu verstehen. Tatsächlich habe ich mehr Zeit damit verbracht herauszufinden, was dein Code genau zu erreichen versucht, und das von dir beschriebene fehlerhafte Verhalten zu reproduzieren, als die tatsächliche Lösung zu finden.
Wenn Sie Ihre Frage bearbeiten, um sie auf das eigentliche Problem zu reduzieren - ich denke, sie könnte für viele Leute, die Pythons Fluchmodul verwenden, sehr hilfreich sein.
Danke & amp; Happy Hacken;)
Bearbeiten: Ich habe gerade festgestellt, dass Sie eine Bounty für eine Antwort aus offiziellen Quellen angeboten haben, also habe ich ein bisschen mehr gegraben und eine äquivalente Antwort auf SO , die auch darauf hindeutet, dass dies - nennen wir it bug - ist bisher undokumentiert. Meine beste Vermutung für den Grund, dass einige libncurses Forschung tun, wäre, dass die curses.wrapper
in meinem Fall, Sie manuell, oder sogar libnurses selbst genannt ein löschen Bildschirmmethode zu jedem Zeitpunkt während der Initialisierung. Daher könnte das Lösch-Flag gesetzt sein, das folglich den Bildschirm bei der ersten Aktualisierung anstelle des erwarteten Verhaltens löscht.
stdscr.getch()
bewirkt eine implizite Aktualisierung von stdscr
(vorher nicht aktualisiert), wodurch pad
vom Bildschirm gelöscht wird, indem es mit dem Leerzeichen stdscr
überschrieben wird. Probieren Sie pad.getch()
aus oder aktualisieren Sie stdscr
vor dem ersten pad.refresh()
.
Tags und Links python curses python-curses