rename class TUI to App, change StdOutWrapper to a context manager and add idea of a main_loop() for the App class
This commit is contained in:
97
docs/build/html/_modules/pylib/tui.html
vendored
97
docs/build/html/_modules/pylib/tui.html
vendored
@@ -37,7 +37,7 @@
|
||||
<span class="c1"># -*- coding: utf-8 -*-</span>
|
||||
<span class="sd">"""TUI module.</span>
|
||||
|
||||
<span class="sd">:Date: 2020-01-10</span>
|
||||
<span class="sd">:Date: 2020-01-13</span>
|
||||
|
||||
<span class="sd">.. module:: tui</span>
|
||||
<span class="sd"> :platform: *nix, Windows</span>
|
||||
@@ -62,43 +62,58 @@
|
||||
<div class="viewcode-block" id="StdOutWrapper"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.StdOutWrapper">[docs]</a><span class="k">class</span> <span class="nc">StdOutWrapper</span><span class="p">:</span>
|
||||
<span class="sd">"""Send print to stdout (print to the standard console).</span>
|
||||
|
||||
<span class="sd"> usage:</span>
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> # catch all prints into StdOutWrapper</span>
|
||||
<span class="sd"> mystdout = StdOutWrapper()</span>
|
||||
<span class="sd"> sys.stdout = mystdout</span>
|
||||
<span class="sd"> sys.stderr = mystdout</span>
|
||||
<span class="sd"> with StdOutWrapper() as mystdout:</span>
|
||||
|
||||
<span class="sd"> # begin curses (curses.initscr())</span>
|
||||
<span class="sd"> # begin curses (curses.initscr(), ...)</span>
|
||||
|
||||
<span class="sd"> # do your stuff here</span>
|
||||
<span class="sd"> # print("foo")</span>
|
||||
<span class="sd"> # you can also output mystdout.get_text() in a ncurses widget in</span>
|
||||
<span class="sd"> # runtime</span>
|
||||
<span class="sd"> # do your stuff here</span>
|
||||
<span class="sd"> # print("foo")</span>
|
||||
<span class="sd"> # you can also output mystdout.get_text() in a ncurses widget in</span>
|
||||
<span class="sd"> # runtime</span>
|
||||
|
||||
<span class="sd"> # end curses (curses.endwin())</span>
|
||||
<span class="sd"> # end curses (curses.endwin())</span>
|
||||
|
||||
<span class="sd"> # go back to normal state and print all catched prints to stdout</span>
|
||||
<span class="sd"> sys.stdout = sys.__stdout__</span>
|
||||
<span class="sd"> sys.stderr = sys.__stderr__</span>
|
||||
<span class="sd"> sys.stdout.write(mystdout.get_text())</span>
|
||||
|
||||
<span class="sd"> source:</span>
|
||||
<span class="sd"> https://stackoverflow.com/a/14010948</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="c1"># https://stackoverflow.com/a/14010948</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""catch all prints into StdOutWrapper</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1">#self.stdout = StdOutWrapper()</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="bp">self</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span> <span class="o">=</span> <span class="bp">self</span>
|
||||
<span class="k">return</span> <span class="bp">self</span> <span class="c1"># to use as: with StdOutWrapper() as mystdout:</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">etype</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">traceback</span><span class="p">):</span>
|
||||
<span class="sd">"""go back to normal state and print all catched prints to</span>
|
||||
<span class="sd"> stdout</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">__stdout__</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">__stderr__</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_text</span><span class="p">())</span>
|
||||
|
||||
<div class="viewcode-block" id="StdOutWrapper.write"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.StdOutWrapper.write">[docs]</a> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">txt</span><span class="p">):</span>
|
||||
<span class="sd">"""print uses write()</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">text</span> <span class="o">+=</span> <span class="n">txt</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)[</span><span class="o">-</span><span class="mi">30</span><span class="p">:])</span></div>
|
||||
|
||||
<div class="viewcode-block" id="StdOutWrapper.get_text"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.StdOutWrapper.get_text">[docs]</a> <span class="k">def</span> <span class="nf">get_text</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">))</span></div></div>
|
||||
<span class="c1">#def get_text(self,beg,end):</span>
|
||||
<span class="c1"># return '\n'.join(self.text.split('\n')[beg:end])</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TUI"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.TUI">[docs]</a><span class="k">class</span> <span class="nc">TUI</span><span class="p">:</span>
|
||||
<div class="viewcode-block" id="App"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.App">[docs]</a><span class="k">class</span> <span class="nc">App</span><span class="p">:</span>
|
||||
<span class="sd">"""TUI text-based user interface</span>
|
||||
|
||||
<span class="sd"> initscr is the encapsulation window object of the stdscr</span>
|
||||
@@ -114,14 +129,9 @@
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">delay</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">delay</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"TUI(delay)"</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"App(delay)"</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Could not convert the argument to an integer."</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># catch all prints into StdOutWrapper</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="n">StdOutWrapper</span><span class="p">()</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">stdout</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">stdout</span>
|
||||
|
||||
<span class="c1"># Define the appearance of some interface elements</span>
|
||||
<span class="n">hotkey_attr</span> <span class="o">=</span> <span class="n">curses</span><span class="o">.</span><span class="n">A_BOLD</span> <span class="o">|</span> <span class="n">curses</span><span class="o">.</span><span class="n">A_UNDERLINE</span>
|
||||
<span class="n">menu_attr</span> <span class="o">=</span> <span class="n">curses</span><span class="o">.</span><span class="n">A_NORMAL</span>
|
||||
@@ -153,10 +163,28 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">last_pressed_ch</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># getch() Note that the integer returned does not have to be in ASCII range: function keys, keypad keys and so on return numbers higher than 256.</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">last_pressed_mouse_ch</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
|
||||
<div class="viewcode-block" id="TUI.refresh"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.TUI.refresh">[docs]</a> <span class="k">def</span> <span class="nf">refresh</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="App.main_loop"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.App.main_loop">[docs]</a> <span class="k">def</span> <span class="nf">main_loop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">with</span> <span class="n">StdOutWrapper</span><span class="p">():</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">'kkkk'</span><span class="p">)</span>
|
||||
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">'kkkk'</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">last_pressed_ch</span> <span class="o">==</span> <span class="nb">ord</span><span class="p">(</span><span class="s1">'q'</span><span class="p">):</span>
|
||||
<span class="k">break</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">refresh</span><span class="p">()</span> <span class="c1"># update the screen</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">'kkkk'</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">getch</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">end</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="App.refresh"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.App.refresh">[docs]</a> <span class="k">def</span> <span class="nf">refresh</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">initscr</span><span class="o">.</span><span class="n">refresh</span><span class="p">()</span> <span class="c1"># update the screen</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TUI.getch"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.TUI.getch">[docs]</a> <span class="k">def</span> <span class="nf">getch</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="App.getch"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.App.getch">[docs]</a> <span class="k">def</span> <span class="nf">getch</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># keep last key value</span>
|
||||
<span class="n">last_pressed_ch_current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">initscr</span><span class="o">.</span><span class="n">getch</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">last_pressed_ch_current</span> <span class="o">!=</span> <span class="n">curses</span><span class="o">.</span><span class="n">ERR</span><span class="p">:</span>
|
||||
@@ -168,7 +196,7 @@
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">last_pressed_ch</span> <span class="o">=</span> <span class="n">last_pressed_ch_current</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TUI.color_table"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.TUI.color_table">[docs]</a> <span class="k">def</span> <span class="nf">color_table</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">window</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="App.color_table"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.App.color_table">[docs]</a> <span class="k">def</span> <span class="nf">color_table</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">window</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Print all available colors with default background.</span>
|
||||
<span class="sd"> Check if curses.has_colors() is True.</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -198,7 +226,7 @@
|
||||
<span class="c1"># End of screen reached</span>
|
||||
<span class="k">pass</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TUI.color_def"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.TUI.color_def">[docs]</a> <span class="k">def</span> <span class="nf">color_def</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="App.color_def"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.App.color_def">[docs]</a> <span class="k">def</span> <span class="nf">color_def</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">curses</span><span class="o">.</span><span class="n">can_change_color</span><span class="p">():</span> <span class="c1"># if True curses.init_color(color_number, r, g, b) can be used</span>
|
||||
<span class="k">pass</span></div>
|
||||
<span class="c1"># changes colors for the terminal also after closing the program.</span>
|
||||
@@ -211,21 +239,16 @@
|
||||
<span class="c1">#curses.init_color(1, *tmp)</span>
|
||||
<span class="c1">#print(curses.color_content(1))</span>
|
||||
|
||||
<div class="viewcode-block" id="TUI.clear"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.TUI.clear">[docs]</a> <span class="k">def</span> <span class="nf">clear</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="App.clear"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.App.clear">[docs]</a> <span class="k">def</span> <span class="nf">clear</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">stdscr</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TUI.end"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.TUI.end">[docs]</a> <span class="k">def</span> <span class="nf">end</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="App.end"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.App.end">[docs]</a> <span class="k">def</span> <span class="nf">end</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""clean up"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">stdscr</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">nocbreak</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">stdscr</span><span class="o">.</span><span class="n">keypad</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">echo</span><span class="p">()</span>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">endwin</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># go back to normal state and print all catched prints to stdout</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">__stdout__</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">__stderr__</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">get_text</span><span class="p">())</span></div></div>
|
||||
<span class="n">curses</span><span class="o">.</span><span class="n">endwin</span><span class="p">()</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="Window"><a class="viewcode-back" href="../../pylib.tui.html#pylib.tui.Window">[docs]</a><span class="k">class</span> <span class="nc">Window</span><span class="p">:</span>
|
||||
|
||||
28
docs/build/html/genindex.html
vendored
28
docs/build/html/genindex.html
vendored
@@ -152,12 +152,14 @@
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.angle">angle() (in module pylib.geometry2d)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step.html#pylib.data_step.arc_circle_geometry">arc_circle_geometry() (in module pylib.data_step)</a>
|
||||
<li><a href="pylib.tui.html#pylib.tui.App">App (class in pylib.tui)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.ArcBSplineCurveWithKnots">ArcBSplineCurveWithKnots (class in pylib.geometry)</a>
|
||||
<li><a href="pylib.data_step.html#pylib.data_step.arc_circle_geometry">arc_circle_geometry() (in module pylib.data_step)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.ArcBSplineCurveWithKnots">ArcBSplineCurveWithKnots (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.ArcCircle">ArcCircle (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.ArcEllipse">ArcEllipse (class in pylib.geometry)</a>
|
||||
@@ -234,7 +236,7 @@
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Properties.circle_sectors">circle_sectors (Properties attribute)</a>
|
||||
</li>
|
||||
<li><a href="pylib.tui.html#pylib.tui.TUI.clear">clear() (TUI method)</a>
|
||||
<li><a href="pylib.tui.html#pylib.tui.App.clear">clear() (App method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.tui.html#pylib.tui.Window.clear">(Window method)</a>
|
||||
@@ -242,9 +244,9 @@
|
||||
</ul></li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.tui.html#pylib.tui.TUI.color_def">color_def() (TUI method)</a>
|
||||
<li><a href="pylib.tui.html#pylib.tui.App.color_def">color_def() (App method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.tui.html#pylib.tui.TUI.color_table">color_table() (TUI method)</a>
|
||||
<li><a href="pylib.tui.html#pylib.tui.App.color_table">color_table() (App method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.CONIC">CONIC (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
@@ -346,7 +348,7 @@
|
||||
</li>
|
||||
<li><a href="pylib.function.html#pylib.function.ellipse">ellipse() (in module pylib.function)</a>
|
||||
</li>
|
||||
<li><a href="pylib.tui.html#pylib.tui.TUI.end">end() (TUI method)</a>
|
||||
<li><a href="pylib.tui.html#pylib.tui.App.end">end() (App method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.function.html#pylib.function.epitrochoid">epitrochoid() (in module pylib.function)</a>
|
||||
</li>
|
||||
@@ -402,7 +404,7 @@
|
||||
</li>
|
||||
<li><a href="pylib.tui.html#pylib.tui.StdOutWrapper.get_text">get_text() (StdOutWrapper method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.tui.html#pylib.tui.TUI.getch">getch() (TUI method)</a>
|
||||
<li><a href="pylib.tui.html#pylib.tui.App.getch">getch() (App method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.tui.html#pylib.tui.Window.getch">(Window method)</a>
|
||||
@@ -494,12 +496,14 @@
|
||||
<h2 id="M">M</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.mathematics.html#module-mathematics">mathematics (module)</a>
|
||||
<li><a href="pylib.tui.html#pylib.tui.App.main_loop">main_loop() (App method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix">matrix (class in pylib.mathematics)</a>
|
||||
<li><a href="pylib.mathematics.html#module-mathematics">mathematics (module)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix">matrix (class in pylib.mathematics)</a>
|
||||
</li>
|
||||
<li><a href="pylib.time_of_day.html#pylib.time_of_day.minutes">minutes() (in module pylib.time_of_day)</a>
|
||||
</li>
|
||||
<li><a href="pylib.time_of_day.html#pylib.time_of_day.minutes_norm">minutes_norm() (in module pylib.time_of_day)</a>
|
||||
@@ -638,7 +642,7 @@
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.rectangle">rectangle() (in module pylib.geometry2d)</a>
|
||||
</li>
|
||||
<li><a href="pylib.tui.html#pylib.tui.TUI.refresh">refresh() (TUI method)</a>
|
||||
<li><a href="pylib.tui.html#pylib.tui.App.refresh">refresh() (App method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.tui.html#pylib.tui.Window.refresh">(Window method)</a>
|
||||
@@ -761,8 +765,6 @@
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.t">t() (matrix static method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.tui.html#pylib.tui.StdOutWrapper.text">text (StdOutWrapper attribute)</a>
|
||||
</li>
|
||||
<li><a href="pylib.tui.html#pylib.tui.Window.text">text() (Window method)</a>
|
||||
</li>
|
||||
@@ -803,8 +805,6 @@
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.transposed">transposed() (matrix static method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.numerical.integration.html#pylib.numerical.integration.trapez">trapez() (in module pylib.numerical.integration)</a>
|
||||
</li>
|
||||
<li><a href="pylib.tui.html#pylib.tui.TUI">TUI (class in pylib.tui)</a>
|
||||
</li>
|
||||
<li><a href="pylib.tui.html#module-tui">tui (module)</a>
|
||||
</li>
|
||||
|
||||
BIN
docs/build/html/objects.inv
vendored
BIN
docs/build/html/objects.inv
vendored
Binary file not shown.
119
docs/build/html/pylib.tui.html
vendored
119
docs/build/html/pylib.tui.html
vendored
@@ -38,96 +38,91 @@
|
||||
<p>TUI module.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Date</dt>
|
||||
<dd class="field-odd"><p>2020-01-10</p>
|
||||
<dd class="field-odd"><p>2020-01-13</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<span class="target" id="module-tui"></span><dl class="class">
|
||||
<dt id="pylib.tui.StdOutWrapper">
|
||||
<em class="property">class </em><code class="sig-name descname">StdOutWrapper</code><a class="reference internal" href="_modules/pylib/tui.html#StdOutWrapper"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.StdOutWrapper" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
|
||||
<p>Send print to stdout (print to the standard console).</p>
|
||||
<p>usage:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># catch all prints into StdOutWrapper</span>
|
||||
<span class="n">mystdout</span> <span class="o">=</span> <span class="n">StdOutWrapper</span><span class="p">()</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="n">mystdout</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span> <span class="o">=</span> <span class="n">mystdout</span>
|
||||
|
||||
<span class="c1"># begin curses (curses.initscr())</span>
|
||||
|
||||
<span class="c1"># do your stuff here</span>
|
||||
<span class="c1"># print("foo")</span>
|
||||
<span class="c1"># you can also output mystdout.get_text() in a ncurses widget in</span>
|
||||
<span class="c1"># runtime</span>
|
||||
|
||||
<span class="c1"># end curses (curses.endwin())</span>
|
||||
|
||||
<span class="c1"># go back to normal state and print all catched prints to stdout</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">__stdout__</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">__stderr__</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">mystdout</span><span class="o">.</span><span class="n">get_text</span><span class="p">())</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="simple">
|
||||
<dt>source:</dt><dd><p><a class="reference external" href="https://stackoverflow.com/a/14010948">https://stackoverflow.com/a/14010948</a></p>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="method">
|
||||
<dt id="pylib.tui.StdOutWrapper.get_text">
|
||||
<code class="sig-name descname">get_text</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#StdOutWrapper.get_text"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.StdOutWrapper.get_text" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="attribute">
|
||||
<dt id="pylib.tui.StdOutWrapper.text">
|
||||
<code class="sig-name descname">text</code><em class="property"> = ''</em><a class="headerlink" href="#pylib.tui.StdOutWrapper.text" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.tui.StdOutWrapper.write">
|
||||
<code class="sig-name descname">write</code><span class="sig-paren">(</span><em class="sig-param">txt</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#StdOutWrapper.write"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.StdOutWrapper.write" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.tui.TUI">
|
||||
<em class="property">class </em><code class="sig-name descname">TUI</code><span class="sig-paren">(</span><em class="sig-param">delay=5</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#TUI"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.TUI" title="Permalink to this definition">¶</a></dt>
|
||||
<dt id="pylib.tui.App">
|
||||
<em class="property">class </em><code class="sig-name descname">App</code><span class="sig-paren">(</span><em class="sig-param">delay=5</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#App"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.App" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
|
||||
<p>TUI text-based user interface</p>
|
||||
<p>initscr is the encapsulation window object of the stdscr
|
||||
stdsc is the curses.initscr</p>
|
||||
<dl class="method">
|
||||
<dt id="pylib.tui.TUI.clear">
|
||||
<code class="sig-name descname">clear</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#TUI.clear"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.TUI.clear" title="Permalink to this definition">¶</a></dt>
|
||||
<dt id="pylib.tui.App.clear">
|
||||
<code class="sig-name descname">clear</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#App.clear"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.App.clear" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.tui.TUI.color_def">
|
||||
<code class="sig-name descname">color_def</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#TUI.color_def"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.TUI.color_def" title="Permalink to this definition">¶</a></dt>
|
||||
<dt id="pylib.tui.App.color_def">
|
||||
<code class="sig-name descname">color_def</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#App.color_def"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.App.color_def" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.tui.TUI.color_table">
|
||||
<code class="sig-name descname">color_table</code><span class="sig-paren">(</span><em class="sig-param">window=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#TUI.color_table"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.TUI.color_table" title="Permalink to this definition">¶</a></dt>
|
||||
<dt id="pylib.tui.App.color_table">
|
||||
<code class="sig-name descname">color_table</code><span class="sig-paren">(</span><em class="sig-param">window=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#App.color_table"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.App.color_table" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Print all available colors with default background.
|
||||
Check if curses.has_colors() is True.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.tui.TUI.end">
|
||||
<code class="sig-name descname">end</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#TUI.end"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.TUI.end" title="Permalink to this definition">¶</a></dt>
|
||||
<dt id="pylib.tui.App.end">
|
||||
<code class="sig-name descname">end</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#App.end"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.App.end" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>clean up</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.tui.TUI.getch">
|
||||
<code class="sig-name descname">getch</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#TUI.getch"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.TUI.getch" title="Permalink to this definition">¶</a></dt>
|
||||
<dt id="pylib.tui.App.getch">
|
||||
<code class="sig-name descname">getch</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#App.getch"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.App.getch" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.tui.TUI.refresh">
|
||||
<code class="sig-name descname">refresh</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#TUI.refresh"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.TUI.refresh" title="Permalink to this definition">¶</a></dt>
|
||||
<dt id="pylib.tui.App.main_loop">
|
||||
<code class="sig-name descname">main_loop</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#App.main_loop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.App.main_loop" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.tui.App.refresh">
|
||||
<code class="sig-name descname">refresh</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#App.refresh"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.App.refresh" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.tui.StdOutWrapper">
|
||||
<em class="property">class </em><code class="sig-name descname">StdOutWrapper</code><a class="reference internal" href="_modules/pylib/tui.html#StdOutWrapper"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.StdOutWrapper" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
|
||||
<p>Send print to stdout (print to the standard console).</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Example</dt>
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># catch all prints into StdOutWrapper</span>
|
||||
<span class="k">with</span> <span class="n">StdOutWrapper</span><span class="p">()</span> <span class="k">as</span> <span class="n">mystdout</span><span class="p">:</span>
|
||||
|
||||
<span class="c1"># begin curses (curses.initscr(), ...)</span>
|
||||
|
||||
<span class="c1"># do your stuff here</span>
|
||||
<span class="c1"># print("foo")</span>
|
||||
<span class="c1"># you can also output mystdout.get_text() in a ncurses widget in</span>
|
||||
<span class="c1"># runtime</span>
|
||||
|
||||
<span class="c1"># end curses (curses.endwin())</span>
|
||||
|
||||
<span class="c1"># go back to normal state and print all catched prints to stdout</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="method">
|
||||
<dt id="pylib.tui.StdOutWrapper.get_text">
|
||||
<code class="sig-name descname">get_text</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#StdOutWrapper.get_text"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.StdOutWrapper.get_text" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.tui.StdOutWrapper.write">
|
||||
<code class="sig-name descname">write</code><span class="sig-paren">(</span><em class="sig-param">txt</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/tui.html#StdOutWrapper.write"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.tui.StdOutWrapper.write" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>print uses write()</p>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
|
||||
2
docs/build/html/searchindex.js
vendored
2
docs/build/html/searchindex.js
vendored
File diff suppressed because one or more lines are too long
@@ -15,7 +15,7 @@ import curses
|
||||
import locale
|
||||
from pylib.data import seq
|
||||
from pylib.function import sine_wave, cosine_wave, hypotrochoid, to_str
|
||||
from pylib.tui import TUI
|
||||
from pylib.tui import App
|
||||
|
||||
locale.setlocale(locale.LC_ALL, '')
|
||||
CODE = locale.getpreferredencoding()
|
||||
@@ -115,7 +115,7 @@ def main(delay=1):
|
||||
"""
|
||||
no window change for mouse events and resize events.
|
||||
"""
|
||||
tui = TUI(delay)
|
||||
tui = App(delay)
|
||||
initscr = tui.initscr
|
||||
try:
|
||||
tui.last_pressed_ch = 0 # getch() Note that the integer returned does not have to be in ASCII range: function keys, keypad keys and so on return numbers higher than 256.
|
||||
|
||||
81
pylib/tui.py
81
pylib/tui.py
@@ -2,7 +2,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""TUI module.
|
||||
|
||||
:Date: 2020-01-10
|
||||
:Date: 2020-01-13
|
||||
|
||||
.. module:: tui
|
||||
:platform: *nix, Windows
|
||||
@@ -27,43 +27,58 @@ def newwin(height, width, y, x):
|
||||
class StdOutWrapper:
|
||||
"""Send print to stdout (print to the standard console).
|
||||
|
||||
usage:
|
||||
:Example:
|
||||
|
||||
::
|
||||
|
||||
# catch all prints into StdOutWrapper
|
||||
mystdout = StdOutWrapper()
|
||||
sys.stdout = mystdout
|
||||
sys.stderr = mystdout
|
||||
with StdOutWrapper() as mystdout:
|
||||
|
||||
# begin curses (curses.initscr())
|
||||
# begin curses (curses.initscr(), ...)
|
||||
|
||||
# do your stuff here
|
||||
# print("foo")
|
||||
# you can also output mystdout.get_text() in a ncurses widget in
|
||||
# runtime
|
||||
# do your stuff here
|
||||
# print("foo")
|
||||
# you can also output mystdout.get_text() in a ncurses widget in
|
||||
# runtime
|
||||
|
||||
# end curses (curses.endwin())
|
||||
# end curses (curses.endwin())
|
||||
|
||||
# go back to normal state and print all catched prints to stdout
|
||||
|
||||
|
||||
"""
|
||||
# https://stackoverflow.com/a/14010948
|
||||
def __init__(self):
|
||||
self.text = ""
|
||||
|
||||
def __enter__(self):
|
||||
"""catch all prints into StdOutWrapper
|
||||
"""
|
||||
#self.stdout = StdOutWrapper()
|
||||
sys.stdout = self
|
||||
sys.stderr = self
|
||||
return self # to use as: with StdOutWrapper() as mystdout:
|
||||
|
||||
def __exit__(self, etype, value, traceback):
|
||||
"""go back to normal state and print all catched prints to
|
||||
stdout
|
||||
"""
|
||||
sys.stdout = sys.__stdout__
|
||||
sys.stderr = sys.__stderr__
|
||||
sys.stdout.write(mystdout.get_text())
|
||||
sys.stdout.write(self.get_text())
|
||||
|
||||
source:
|
||||
https://stackoverflow.com/a/14010948
|
||||
"""
|
||||
text = ""
|
||||
def write(self, txt):
|
||||
"""print uses write()
|
||||
"""
|
||||
self.text += txt
|
||||
self.text = '\n'.join(self.text.split('\n')[-30:])
|
||||
|
||||
def get_text(self):
|
||||
return '\n'.join(self.text.split('\n'))
|
||||
#def get_text(self,beg,end):
|
||||
# return '\n'.join(self.text.split('\n')[beg:end])
|
||||
|
||||
|
||||
class TUI:
|
||||
class App:
|
||||
"""TUI text-based user interface
|
||||
|
||||
initscr is the encapsulation window object of the stdscr
|
||||
@@ -79,14 +94,9 @@ class TUI:
|
||||
try:
|
||||
delay = int(delay)
|
||||
except ValueError:
|
||||
print("TUI(delay)")
|
||||
print("App(delay)")
|
||||
print("Could not convert the argument to an integer.")
|
||||
|
||||
# catch all prints into StdOutWrapper
|
||||
self.stdout = StdOutWrapper()
|
||||
sys.stdout = self.stdout
|
||||
sys.stderr = self.stdout
|
||||
|
||||
# Define the appearance of some interface elements
|
||||
hotkey_attr = curses.A_BOLD | curses.A_UNDERLINE
|
||||
menu_attr = curses.A_NORMAL
|
||||
@@ -118,6 +128,24 @@ class TUI:
|
||||
self.last_pressed_ch = 0 # getch() Note that the integer returned does not have to be in ASCII range: function keys, keypad keys and so on return numbers higher than 256.
|
||||
self.last_pressed_mouse_ch = 0
|
||||
|
||||
def main_loop(self):
|
||||
with StdOutWrapper():
|
||||
try:
|
||||
print('kkkk')
|
||||
while True:
|
||||
self.clear()
|
||||
print('kkkk')
|
||||
|
||||
if self.last_pressed_ch == ord('q'):
|
||||
break
|
||||
|
||||
self.refresh() # update the screen
|
||||
print('kkkk')
|
||||
self.getch()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
self.end()
|
||||
|
||||
def refresh(self):
|
||||
self.initscr.refresh() # update the screen
|
||||
|
||||
@@ -187,11 +215,6 @@ class TUI:
|
||||
curses.echo()
|
||||
curses.endwin()
|
||||
|
||||
# go back to normal state and print all catched prints to stdout
|
||||
sys.stdout = sys.__stdout__
|
||||
sys.stderr = sys.__stderr__
|
||||
sys.stdout.write(self.stdout.get_text())
|
||||
|
||||
|
||||
class Window:
|
||||
"""Window
|
||||
|
||||
Reference in New Issue
Block a user