Styles für StyledTextCtrl, Ausgabe farbig und mit Bildern

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Scyks
User
Beiträge: 17
Registriert: Freitag 3. August 2007, 09:03

Dienstag 7. August 2007, 08:48

Hey Forum,

hab nun schon Google ohne ende missbraucht und die Dokumentationen studiert aber die ist so minimal das man doch da echt nich durchblickt.

Meine Überlegung ist es für eine Chatausgabe styledTextCtrl zu benutzen, denn dort kann man so weit ich gelesen habe images (smilies) einbinden.

Textfarbe müsste ich auch manuell pro ausgabe definieren könne. Im normalen TextCtrl geht das ja ganz einfach jedoch weiß ich nicht wie das im StyledTextCtrl funktioniert.

Könnte mir jemand Tipps oder sogar n Codeschnippesl geben wo man sieht wie das funktioniert?

So sollte eine mögliche Ausgabe aussehen:
07.08.06 9:43:22 User XYZ: Das ist ein Text incl. Smilies :P
Ich bin echt am Verzweifeln momentan.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Dienstag 7. August 2007, 09:38

Scyks hat geschrieben:für eine Chatausgabe styledTextCtrl zu benutzen
Hallo Scyks!

Verwende stattdessen wx.HtmlWindow. Das ist viel, viel einfacher.

mfg
Gerold
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Scyks
User
Beiträge: 17
Registriert: Freitag 3. August 2007, 09:03

Dienstag 7. August 2007, 10:10

gerold hat geschrieben:Verwende stattdessen wx.HtmlWindow. Das ist viel, viel einfacher.

mfg
Gerold
:-)
Hallo Gerold,

vielen Dank für deine schnelle Antwort.
Ist nicht bei dem HtmlWindow das Problem das dieses nur HTML Datein einlesen kann. Hab die Idee auch schon gehabt aber noch nicht wirklich getestet.

Wie postet man denn da HTML rein? Der muss doch dann sicher auch geparst werden oder? Funktioniert automatisches Scrollen direkt aus Python oder muss ich dann JavaScript verwenden?

:roll: Fragen über Fragen .....
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Dienstag 7. August 2007, 11:07

Scyks hat geschrieben:Wie postet man denn da HTML rein? Der muss doch dann sicher auch geparst werden oder? Funktioniert automatisches Scrollen direkt aus Python oder muss ich dann JavaScript verwenden?
Hallo Scyks!

Das sind alles keine großen Probleme. Aber nach kurzer Überlegung ist mir eingefallen, dass das ja alles schon von der wx.HtmlListBox erledigt wird.

Also hier ein Beispiel:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import wx

wx.SetDefaultPyEncoding("iso-8859-15")


class ChatList(wx.HtmlListBox):

    _data = []
   
    def get_data(self):
        return self._data
   
    def set_data(self, data):
        self._data = data
        self.SetItemCount(len(data))
   
    data = property(get_data, set_data)

    def OnGetItem(self, n):
        return self._data[n]


class MyFrame(wx.Frame):
    
    def __init__(
        self, parent = None, title = "Example", size = wx.Size(550, 420)
    ):
        wx.Frame.__init__(self, parent, -1, title, size = size)
        
        panel = wx.Panel(self)
        
        vbox_main = wx.BoxSizer(wx.VERTICAL)
        panel.SetSizer(vbox_main)
        
        chatlist = ChatList(panel)
        vbox_main.Add(chatlist, 1, wx.ALL | wx.EXPAND, 5)
        self.chatlist = chatlist
        
        
        txt_message = wx.TextCtrl(panel)
        self.txt_message = txt_message
        vbox_main.Add(txt_message, 0, wx.EXPAND | wx.ALL, 5)
        txt_message.SetFocus()
        
        btn_insert = wx.Button(panel, label = "Insert")
        vbox_main.Add(btn_insert, 0, wx.ALL, 5)
        btn_insert.SetDefault()
        btn_insert.Bind(wx.EVT_BUTTON, self.insert_message)
    
    
    def insert_message(self, event):
        message = self.txt_message.GetValue()
        self.txt_message.SetValue("")
        message = message.replace("\\n", "<br>\n")
        chatlist = self.chatlist
        
        data = chatlist.data
        data.append('<b><font color="blue">Hallo</font> Welt:</b>%s' % message)
        # Maximal 10000 Einträge zulassen
        if len(data) > 10000:
            data.pop(0)
        datalen = len(data)
        chatlist.SetItemCount(datalen)
        
        chatlist.SetSelection(datalen - 1)
        chatlist.Refresh(datalen - 1)
        chatlist.SetSelection(datalen - 1)


def main():
    """Testing"""
    app = wx.PySimpleApp()
    f = MyFrame()
    f.Center()
    f.Show()
    app.MainLoop()


if __name__ == "__main__":
    main()
Schwieriger wird es, wenn der blaue Balken stört. Das bringt man nicht weg. Dann müsste man sich selber so eine Listbox programmieren. Aber für den Anfang sollte die wx.HtmlListBox reichen.

mfg
Gerold
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Scyks
User
Beiträge: 17
Registriert: Freitag 3. August 2007, 09:03

Dienstag 7. August 2007, 12:00

Hallo Gerold,

prinzipiell sieht das schon sehr gut aus. Der blaue Balken, also die Selektierung stört dann doch ein wenig. Ich würde dann eher das wx.HtmlWindow vorziehen,da ist man wohl unflexibler und man hat mehr Freiheiten.

Wenn dann Javascript noch funktioniert kann man ziehmlich geile Spielereien machen.
Es lässt mir mehr Freiheiten und man kann Templates zur Ausgabe bereitstellen. Das würde mir besser gefallen.

Gibt es Tutorials die beschreiben wie man sowas löst?

Eine kleine Hilfe reicht denke ich aus, so komopliziert ist das alles ja nicht ;)

Vielen Dank schonmal für die Hilfe.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Dienstag 7. August 2007, 12:31

Scyks hat geschrieben:Wenn dann Javascript noch funktioniert kann man ziehmlich geile Spielereien machen.
Hallo Scyks!

Nein, Javascript funktioniert nich im wx.HtmlWindow. Es kann nur einfache HTML-Tags wie ``<b>`` oder ``<font color="green">`` umsetzen. Weder CSS noch Formulare oder sonstige HTML-Geschichten sind möglich. Der Zweck des wx.HtmlWindow ist Text formatiert anzuzeigen. Mehr nicht. Hast du "wxPython in Action" noch nicht gelesen? :P

mfg
Gerold
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Scyks
User
Beiträge: 17
Registriert: Freitag 3. August 2007, 09:03

Dienstag 7. August 2007, 12:53

Ähm! :oops: Nein, hab das Buch noch nicht gelesen. Suche mir meine Sachen meistens im Internet zusammen mit Doc`s und Manuals.

Ist zwar nicht ganz so perfekt wenn CSS und so nicht funktioniert aber immerhin ein Ansatz. Tabellen wären Perfekt, denn kann man mit Grafiken arbeiten und wenigstens Designsets anbieten.

Das würde mir trotzdem schon weiterhelfen. Hast du zufällig schon nen kleinen Code?

Oder einen kleinen Ansatz wie man das macht? evtl sogar mit Append und Scrolling?
Scyks
User
Beiträge: 17
Registriert: Freitag 3. August 2007, 09:03

Dienstag 7. August 2007, 20:02

Danke für die Tipps, hab jetzt ein wenig mit wx.HtmlWindow rumgespielt und das klappt echt gut ;)

Mein Problem ist damit gelöst :D, den Rest kriege ich denke ich wieder alleine hin ;)

Vielen Dank für die Hilfe :)
Antworten