File: Table_editor_with_progress_column.py

package info (click to toggle)
python-traitsui 6.1.3-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 11,252 kB
  • sloc: python: 44,765; makefile: 117
file content (57 lines) | stat: -rw-r--r-- 1,354 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from __future__ import absolute_import
import random

from pyface.api import GUI
from traits.api import Button, HasTraits, Instance, Int, List, Str
from traitsui.api import ObjectColumn, TableEditor, UItem, View
from traitsui.extras.progress_column import ProgressColumn


class Job(HasTraits):

    name = Str

    percent_complete = Int


class JobManager(HasTraits):

    jobs = List(Instance(Job))

    start = Button

    def populate(self):
        self.jobs = [
            Job(name='job %02d' % i, percent_complete=0)
            for i in range(1, 25)
        ]

    def process(self):
        for job in self.jobs:
            job.percent_complete = min(
                job.percent_complete + random.randint(0, 3), 100)

        if any(job.percent_complete < 100 for job in self.jobs):
            GUI.invoke_after(100, self.process)

    def _start_fired(self):
        self.populate()
        GUI.invoke_after(1000, self.process)

    view = View(
        UItem('jobs', editor=TableEditor(
            columns=[
                ObjectColumn(name='name'),
                ProgressColumn(name='percent_complete'),
            ]
        )),
        UItem('start'),
        resizable=True,
    )


demo = view = job_manager = JobManager()

# Run the demo (if invoked from the command line):
if __name__ == '__main__':
    demo.configure_traits()