pyqttable

A simple configurable table widget based on PyQt5 and pandas


License
MIT
Install
pip install pyqttable==0.0.1

Documentation

pyqttable

A simple configurable table widget based on PyQt5 and pandas

How to use

from pyqttable import PyQtTable

table_widget = PyQtTable(
    parent=None, 
    column_config=my_config,
    show_filter=True,
    sortable=True,
)

Column Config

A list of configurations for each column

Config Key Description Value Type Default Value
key key of column (used to access data from DataFrame) str # required
name column name to display str # same as key
type column value type (required for conversion between real value and string) # see Column.Type str
editable controlling the cell value is read-only or not bool True
default default value when key is missing in data (not recommended) - None
h_align horizontal alignment # see Column.Align 'l'
v_align vertical alignment # see Column.Align 'c'
selection list of valid values list None
sort_lt DIY __lt__ methods for sorting (only effective when sortable is True) # see Column.Sort None
filter_type filter type (only effective when show_filter is True) # see Column.Filter 'contain'
color font color (in string or tuple indicating RGB) # see Column.Color None
bg_color background color (same format as color) # see Column.Color None

Example

{
    'key': 'gender',                        # same as DataFrame column
    'name': 'Gender',                       # shown as table header
    'type': str,                            # string variable
    'editable': False,                      # read-only
    'selection': ['male', 'female'],        # could be either 'male' or 'female'
    'h_align': 'r',                         # align right
    'sort_lt': lambda x, y: x == 'female',  # 'female' < 'male'
    'filter_type': 'multiple_choice',       # multiple-choice filter
    'bg_color': (135, 206, 250)},           # blue opaque background
}

Column.Type

Column type should be following class (not instance)

Column type
int
float
str
bool
datetime.datetime
datetime.date
datetime.time

Column type can also be instance of ColumnType Inherit from ColumnType to make DIY column type Inherit from EditorFactory to make DIY editor for DIY column type (if required)

from pyqttable.column import type_
from pyqttable.editor import EditorFactory

class MyEditorFactory(EditorFactory):
    ...

class MyColumnType(type_.ColumnType):
    EditorFactory = MyEditorFactory()
    ...

Column.Align

Key Valid value Flag
h_align 'l' / 'left' AlignLeft
h_align 'r' / 'right' AlignRight
h_align 'c' / 'center' AlignHCenter
v_align 't' / 'top' AlignTop
v_align 'b' / 'bottom' AlignBottom
v_align 'c' / 'center' AlignVCenter

Column.Color

Value type Value format
str '#RRGGBB'
Tuple[int] (R, G, B, Optional[T])

Column.Filter

Column filter type should by following string

Filter type
'exact'
'contain'
'expression'
'regex'
'multiple_choice'

Column filter type can also be instance of Filter Inherit from Filter to make DIY filter type

from pyqttable.column import filter_

class MyFilterType(filter_.Filter):
    ...

Column.Sort

Variable sort_lt should be a function with same signature as __lt__ When sort_lt is defined, sorting action will based on sort_lt instead of default __lt__

How to set data

import pandas as pd
my_data = pd.DataFrame(...)
table_widget.set_data(my_data)

How to get data

my_data = table_widget.get(data)
shown_data = table_widget.get(data, full=False)