Frage

Ich habe ein kleines Logging-App (geschrieben in wxPython) die Daten von einem Bit-Kit erhält die wir entwickeln, und ich mag den Text in einem scrollenden Fenster angezeigt werden soll. Wie es aussieht, ich bin ein wx.TextCtrl für die Textanzeige mit, aber ich habe einige Probleme mit dem Scroll-Verhalten haben.

Im Grunde würde ich es gerne so, dass, wenn die Bildlaufleiste am unteren Rand des Fensters (das heißt das Ende der eingehenden Daten), sind mehr Daten hinzufügen weiter die Ansicht blättern. Wenn jedoch hat sich die Ansicht gescrollt wurde oben ein wenig (das heißt der Nutzer sucht auf etwas Interessantes wie eine Fehlermeldung), sollte die App nur den Text am Ende hinzufügen, ohne mehr zu scrollen.

Ich habe zwei Probleme im Moment:

  1. Ich kann aus nicht funktionieren, wie die aktuelle Bildlaufposition abzurufen (Anrufe zu GetScrollPos () scheint nicht zu funktionieren - sie zurückkehren 0 nur).
  2. Ich kann aus nicht funktionieren, wie der aktuellen Bereich der Bildlaufleiste abrufen (Anruf zu GetScrollRange () nur 1 zurück).

Ich habe ein bisschen gegoogelt und es scheint ein paar Hinweise zu sein, die GetScrollPos und GetScrollRange vorschlagen wird für eine wx.TextCtrl nicht? Hat jemand keine Erfahrung in diesem Bereich hat? Gibt es eine nette einfache Möglichkeit, das Problem zu lösen oder werde ich meine eigene wx.TextCtrl rollen?

War es hilfreich?

Lösung

Getestet habe ich nur ein einfaches Beispiel (GetScrollPos(0) und GetScrollRange(0) in EVT_TEXT Ereignishandler für wx.TextCtrl Kontrolle) und es funktioniert gut für mich -. Sie Index der aktuell angezeigten Zeile und Gesamtanzahl der Zeilen zurückgeben bzw.

Vielleicht ist das Problem ist Ihre WxPython Version? Früher habe ich:

>>> import wx
>>> wx.version()
'2.8.9.1 (msw-unicode)'

Andere Tipps

Okay, also hier ist, wo ich habe an:

import wx
from threading import Timer
import time

class Form1(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        self.logger = wx.TextCtrl(self,5, "",wx.Point(20,20), wx.Size(200,200), \
                wx.TE_MULTILINE |  wx.TE_READONLY)# |  wx.TE_RICH2)

        t = Timer(0.1, self.AddText)
        t.start()

    def AddText(self):
        # Resart the timer
        t = Timer(0.25, self.AddText)
        t.start() 

        # Work out if we're at the end of the file
        currentCaretPosition = self.logger.GetInsertionPoint()
        currentLengthOfText = self.logger.GetLastPosition()
        if currentCaretPosition != currentLengthOfText:
            self.holdingBack = True
        else:
            self.holdingBack = False

        timeStamp = str(time.time())

        # If we're not at the end of the file, we're holding back
        if self.holdingBack:
            print "%s FROZEN"%(timeStamp)
            self.logger.Freeze()
            (currentSelectionStart, currentSelectionEnd) = self.logger.GetSelection()
            self.logger.AppendText(timeStamp+"\n")
            self.logger.SetInsertionPoint(currentCaretPosition)
            self.logger.SetSelection(currentSelectionStart, currentSelectionEnd)
            self.logger.Thaw()
        else:
            print "%s THAWED"%(timeStamp)
            self.logger.AppendText(timeStamp+"\n")

app = wx.PySimpleApp()
frame = wx.Frame(None, size=(550,425))
Form1(frame)
frame.Show(1)
app.MainLoop()

Diese einfache Demo-Anwendung fast perfekt funktioniert. Es rollt ordentlich, wenn der Benutzer eine Zeile klickt, die nicht am Ende des Textes. Danach bleibt es schön und noch so Sie Text auswählen können (Anmerkung: Es gibt immer noch einen Fehler, dass, wenn Sie nicht nach unten, wählen Sie bis es löscht Ihre Auswahl).

Das größte Ärgernis ist, dass, wenn ich das versuchen und aktivieren Sie „| wx.TE_RICH2“ Option, es geht alles etwas birnenförmig. Ich brauche diese wirklich Syntax-Hervorhebung von Fehlern zu tun, aber wenn ich diese Option nicht aktivieren können, ich bin zu monochromen zum Scheitern verurteilt - boo

Jede weitere Ideen, wie auf der Rich Edit-Steuerung zurück zu halten Scrollen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top