class LoggerPanel(DisclosurePanel): def __init__(self, maxhistory=100, maxloglinelength=200, headerStyleName=None, panelStyleName=None, buttonStyleName=None, labelStyleName=None): super(LoggerPanel, self).__init__(self, header='BLAH', isOpen=False) self.labelStyleName = labelStyleName self.maxhistory = maxhistory self.maxloglinelength = maxloglinelength self.getHeader().setStyleName(headerStyleName) self.logpanel = VerticalPanel(StyleName=panelStyleName) self.setContent(self.logpanel) self.clearbutton = Button('Clear', listener=self.clear, StyleName=buttonStyleName) self.logpanel.add(self.clearbutton) self.updateHeaderText() def log(self, string): self.logpanel.add(Label(string[:self.maxloglinelength], StyleName=self.labelStyleName)) widgcnt = self.logpanel.getWidgetCount() if widgcnt > self.maxhistory: for i in range(0, widgcnt - self.maxhistory): self.logpanel.remove(self.logpanel.getWidget(i)) self.updateHeaderText() def __call__(self, string): self.log(string) return def updateHeaderText(self): self.getHeader().setText('Logging: %s items' % (self.logpanel.getWidgetCount() - 1)) def clear(self): self.logpanel.clear() self.logpanel.add(self.clearbutton) self.updateHeaderText()