full example with python 3.8.3, wxpython 4.1.0 and Windows 10
import wx
import wx.lib.agw.ultimatelistctrl as ULC
import threading
class Ventana(wx.Frame):
def __init__(self, *args, **kwargs):
super().__init__(parent=None, title='Titulo')
self.panel = wx.Panel(self, wx.ID_ANY)
self.tabla = ULC.UltimateListCtrl(self.panel, wx.ID_ANY,agwStyle=ULC.ULC_REPORT | ULC.ULC_VRULES | ULC.ULC_HRULES | ULC.ULC_STICKY_HIGHLIGHT |
ULC.ULC_NO_HIGHLIGHT | ULC.ULC_SINGLE_SEL | ULC.ULC_HAS_VARIABLE_ROW_HEIGHT | ULC.ULC_FOOTER)
self.indice = 0
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.tabla, 1, wx.EXPAND, 0)
self.cabecera()
self.panel.SetSizer(sizer)
self.SetSize((800,600))
# self.rellenar_tabla() # No problem, button showed in col 0
workThread = threading.Thread(target=self.rellenar_tabla) # button dont showss
workThread.start()
def cabecera(self):
font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
titulo_col = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
titulo_col.SetWeight(wx.BOLD)
titulo_col.SetPointSize(9)
info = ULC.UltimateListItem()
# info._format = wx.LIST_FORMAT_RIGHT
info.SetAlign(2) # 0: LIST_FORMAT_LEFT (align_left), 1: LIST_FORMAT_RIGhT (align_right), 2: LIST_FORMAT_CENTER (align_center
# info._mask = wx.LIST_MASK_TEXT | ULC.ULC_MASK_PYDATA | wx.LIST_MASK_FORMAT | ULC.ULC_MASK_FONT | ULC.ULC_MASK_HYPERTEXT
info.SetMask(wx.LIST_MASK_TEXT | ULC.ULC_MASK_PYDATA | wx.LIST_MASK_FORMAT | ULC.ULC_MASK_FONT)
# info._image = []
info.SetImage([])
# info._text = "Title"
info.SetText("Justificante")
info._font = titulo_col
# info.SetFont(boldfont)
# info.SetPyData(pyObject) # pyObject puede ser cualquier objeto python (diccionario, lista, clase propia etc)
# info.SetWidth(-3) # autofill
self.tabla.InsertColumnInfo(0, info)
info = ULC.UltimateListItem()
info.SetAlign(2) # 0: LIST_FORMAT_LEFT (align_left), 1: LIST_FORMAT_RIGhT (align_right), 2: LIST_FORMAT_CENTER (align_center
info.SetMask(wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT | ULC.ULC_MASK_FONT )
info.SetText("Documento")
info._font = titulo_col
# info.SetFont(boldfont)
# info.SetWidth(100)
self.tabla.InsertColumnInfo(1, info)
info = ULC.UltimateListItem()
info.SetAlign(
2) # 0: LIST_FORMAT_LEFT (align_left), 1: LIST_FORMAT_RIGhT (align_right), 2: LIST_FORMAT_CENTER (align_center
info.SetMask(wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT | ULC.ULC_MASK_FONT )
info.SetText("Importador")
info._font = titulo_col
# info.SetFont(boldfont)
# info.SetWidth(100)
self.tabla.InsertColumnInfo(2, info)
info = ULC.UltimateListItem()
info.SetAlign(
2) # 0: LIST_FORMAT_LEFT (align_left), 1: LIST_FORMAT_RIGhT (align_right), 2: LIST_FORMAT_CENTER (align_center
info.SetMask(wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT | ULC.ULC_MASK_FONT)
info.SetText("Declarante")
info._font = titulo_col
# info.SetFont(boldfont)
# info.SetWidth(200)
self.tabla.InsertColumnInfo(3, info)
info = ULC.UltimateListItem()
info.SetAlign(
2) # 0: LIST_FORMAT_LEFT (align_left), 1: LIST_FORMAT_RIGhT (align_right), 2: LIST_FORMAT_CENTER (align_center
info.SetMask(wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT | ULC.ULC_MASK_FONT)
info.SetText("Fecha de Contraccion")
info._font = titulo_col
# info.SetFont(boldfont)
# info.SetWidth(100)
self.tabla.InsertColumnInfo(4, info)
info = ULC.UltimateListItem()
info.SetAlign(
2) # 0: LIST_FORMAT_LEFT (align_left), 1: LIST_FORMAT_RIGhT (align_right), 2: LIST_FORMAT_CENTER (align_center
info.SetMask(wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT | ULC.ULC_MASK_FONT)
info.SetText("Fecha Limite")
info._font = titulo_col
# info.SetFont(boldfont)
# info.SetWidth(100)
self.tabla.InsertColumnInfo(5, info)
info = ULC.UltimateListItem()
info.SetAlign(2) # 0: LIST_FORMAT_LEFT (align_left), 1: LIST_FORMAT_RIGhT (align_right), 2: LIST_FORMAT_CENTER (align_center
info.SetMask(wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT | ULC.ULC_MASK_FONT)
info.SetText("Importe")
info._font = titulo_col
# info.SetFont(titulo_col)
# info.SetWidth(100)
self.tabla.InsertColumnInfo(6, info)
info = ULC.UltimateListItem()
info.SetAlign(2) # 0: LIST_FORMAT_LEFT (align_left), 1: LIST_FORMAT_RIGhT (align_right), 2: LIST_FORMAT_CENTER (align_center
info.SetMask(wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT | ULC.ULC_MASK_FONT)
info.SetText("MRN")
info._font = titulo_col
# info.SetFont(boldfont)
# info.SetWidth(100)
self.tabla.InsertColumnInfo(7, info)
self.tabla.SetColumnWidth(0, -3)
self.tabla.SetColumnWidth(1, 170) # -1,-2,-3 #https: // docs.wxpython.org / wx.lib.agw.ultimatelistctrl.UltimateListCtrl.html # wx.lib.agw.ultimatelistctrl.UltimateListCtrl.SetColumnWidth
self.tabla.SetColumnWidth(2, 100)
self.tabla.SetColumnWidth(3, 100)
self.tabla.SetColumnWidth(4, 150)
self.tabla.SetColumnWidth(5, 150)
self.tabla.SetColumnWidth(6, 100)
self.tabla.SetColumnWidth(7, 200)
# self.SetColumnWidth(8, 100)
def rellenar_tabla(self):
print('rellenar')
fila= ( 'col1','col2','col3', 'col4', 'col5', 'col6', 'col7', 'col8')
self.tabla.Append(fila)
boton_justificante = wx.Button(self.tabla, wx.ID_ANY, 'value', style= wx.BORDER_NONE | wx.BU_NOTEXT)
boton_justificante.Row = self.indice
self.tabla.SetItemWindow(self.indice, col=0, wnd=boton_justificante, expand=True)
self.indice = self.indice + 1
class App(wx.App):
def __init__(self, *args, **kwargs):
super().__init__()
def OnInit(self):
ventana = Ventana()
self.SetTopWindow(ventana)
ventana.Show()
return True
def InitLocale(self):
self.ResetLocale()
import locale
lang, enc = locale.getdefaultlocale()
self._initial_locale = wx.Locale(lang, lang[:2], lang)
locale.setlocale(locale.LC_ALL, lang)
if __name__ == '__main__':
app = App()
app.MainLoop()