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
