Latest posts on помогите с выбором фреймворка topichttp://python.su/forum/topic/39684/2020-12-08T17:42:38+02:00Общий :: GUI :: помогите с выбором фреймворка
2020-12-08T17:42:38+02:00AD0DE412213370просто <a href="https://en.wikipedia.org/wiki/Weak_reference#Python">предположение</a> …
Общий :: GUI :: помогите с выбором фреймворка
2020-12-08T08:20:19+02:00@cckyi_boxxx213358прорблему решил так, но вопрос почему сишная часть wx удаляет еще используемые объекты и как это пофиксить остается открытым.<br/><div class="code"><pre> <span class="k">def</span> <span class="nf">colorize_row</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gridobj</span><span class="p">,</span> <span class="n">row</span><span class="p">,</span> <span class="n">color</span><span class="p">):</span>
<span class="sd">"""method set row background color"""</span>
<span class="n">numcols</span> <span class="o">=</span> <span class="n">gridobj</span><span class="o">.</span><span class="n">GetNumberCols</span><span class="p">()</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">numcols</span><span class="p">):</span>
<span class="n">gridobj</span><span class="o">.</span><span class="n">SetCellBackgroundColour</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">color</span><span class="p">)</span>
</pre></div>
Общий :: GUI :: помогите с выбором фреймворка
2020-12-07T15:52:35+02:00@cckyi_boxxx213349<blockquote><em>doza_and</em><br/>Это будет не ваша головная боль а юристов которые должны будут это все оформлять.</blockquote>К сожалению моя, ибо софт пишу для своей будущей организации.<br/><br/>у меня тут новая проблема с wx назрела, решился все-таки сразу на нем пилить, не намного он сложнее Qt, выкладываю весь код gui, а прорблемное место в нем обозначено соответствующим коментарием (СТРАННЫЕ ДЕЛА ТВОРЯТСЯ ЗДЕСЬ).<br/><br/><div class="code"><pre> <span class="c1">#-*- coding:utf-8 -*-</span>
<span class="kn">import</span> <span class="nn">wx</span>
<span class="kn">import</span> <span class="nn">wx.grid</span>
<span class="kn">from</span> <span class="nn">wx.lib</span> <span class="kn">import</span> <span class="n">wordwrap</span>
<span class="kn">import</span> <span class="nn">locale</span>
<span class="n">locale</span><span class="o">.</span><span class="n">setlocale</span><span class="p">(</span><span class="n">locale</span><span class="o">.</span><span class="n">LC_ALL</span><span class="p">,</span><span class="s1">'ru'</span><span class="p">)</span><span class="c1"># locale.locale_alias['ru'])</span>
<span class="k">class</span> <span class="nc">CutomGridCellAutoWrapStringRenderer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">GridCellRenderer</span><span class="p">):</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="sd">"""класс костыль для автоматического расширения ячеек при многострочном заполнении"""</span>
<span class="n">wx</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">GridCellRenderer</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">Draw</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">grid</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">dc</span><span class="p">,</span> <span class="n">rect</span><span class="p">,</span> <span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">,</span> <span class="n">isSelected</span><span class="p">):</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">grid</span><span class="o">.</span><span class="n">GetCellValue</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">)</span>
<span class="n">dc</span><span class="o">.</span><span class="n">SetFont</span><span class="p">(</span> <span class="n">attr</span><span class="o">.</span><span class="n">GetFont</span><span class="p">()</span> <span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">wordwrap</span><span class="o">.</span><span class="n">wordwrap</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">grid</span><span class="o">.</span><span class="n">GetColSize</span><span class="p">(</span><span class="n">col</span><span class="p">),</span> <span class="n">dc</span><span class="p">,</span> <span class="n">breakLongWords</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
<span class="c1"># начало моего костыля</span>
<span class="n">numlines</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">count</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">1</span>
<span class="n">defrowsize</span> <span class="o">=</span> <span class="n">grid</span><span class="o">.</span><span class="n">GetDefaultRowSize</span><span class="p">()</span>
<span class="n">currowsize</span> <span class="o">=</span> <span class="n">grid</span><span class="o">.</span><span class="n">GetRowSize</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
<span class="n">needrowsize</span> <span class="o">=</span> <span class="n">currowsize</span> <span class="o">//</span> <span class="n">defrowsize</span>
<span class="k">if</span> <span class="n">numlines</span> <span class="o">></span> <span class="n">needrowsize</span><span class="p">:</span>
<span class="n">newrowsize</span> <span class="o">=</span> <span class="n">numlines</span> <span class="o">*</span> <span class="n">defrowsize</span>
<span class="n">grid</span><span class="o">.</span><span class="n">SetRowSize</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">newrowsize</span><span class="p">)</span>
<span class="c1"># конец моего костыля</span>
<span class="n">hAlign</span><span class="p">,</span> <span class="n">vAlign</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">GetAlignment</span><span class="p">()</span>
<span class="k">if</span> <span class="n">isSelected</span><span class="p">:</span>
<span class="n">bg</span> <span class="o">=</span> <span class="n">grid</span><span class="o">.</span><span class="n">GetSelectionBackground</span><span class="p">()</span>
<span class="n">fg</span> <span class="o">=</span> <span class="n">grid</span><span class="o">.</span><span class="n">GetSelectionForeground</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">bg</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">GetBackgroundColour</span><span class="p">()</span>
<span class="n">fg</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">GetTextColour</span><span class="p">()</span>
<span class="n">dc</span><span class="o">.</span><span class="n">SetTextBackground</span><span class="p">(</span><span class="n">bg</span><span class="p">)</span>
<span class="n">dc</span><span class="o">.</span><span class="n">SetTextForeground</span><span class="p">(</span><span class="n">fg</span><span class="p">)</span>
<span class="n">dc</span><span class="o">.</span><span class="n">SetBrush</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">Brush</span><span class="p">(</span><span class="n">bg</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">SOLID</span><span class="p">))</span>
<span class="n">dc</span><span class="o">.</span><span class="n">SetPen</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">TRANSPARENT_PEN</span><span class="p">)</span>
<span class="n">dc</span><span class="o">.</span><span class="n">DrawRectangle</span><span class="p">(</span><span class="n">rect</span><span class="p">)</span>
<span class="n">grid</span><span class="o">.</span><span class="n">DrawTextRectangle</span><span class="p">(</span><span class="n">dc</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">rect</span><span class="p">,</span> <span class="n">hAlign</span><span class="p">,</span> <span class="n">vAlign</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">GetBestSize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">grid</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">dc</span><span class="p">,</span> <span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">):</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">grid</span><span class="o">.</span><span class="n">GetCellValue</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">)</span>
<span class="n">dc</span><span class="o">.</span><span class="n">SetFont</span><span class="p">(</span><span class="n">attr</span><span class="o">.</span><span class="n">GetFont</span><span class="p">())</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">wordwrap</span><span class="o">.</span><span class="n">wordwrap</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">grid</span><span class="o">.</span><span class="n">GetColSize</span><span class="p">(</span><span class="n">col</span><span class="p">),</span> <span class="n">dc</span><span class="p">,</span> <span class="n">breakLongWords</span> <span class="o">=</span> <span class="bp">False</span><span class="p">)</span>
<span class="n">w</span><span class="p">,</span> <span class="n">h</span><span class="p">,</span> <span class="n">lineHeight</span> <span class="o">=</span> <span class="n">dc</span><span class="o">.</span><span class="n">GetMultiLineTextExtent</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
<span class="k">return</span> <span class="n">wx</span><span class="o">.</span><span class="n">Size</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">h</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">Clone</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">CutomGridCellAutoWrapStringRenderer</span><span class="p">()</span>
<span class="k">class</span> <span class="nc">MyFrame</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">Frame</span><span class="p">):</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="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span>
<span class="sd">"""This class provides graphical interface declaration and base signal processing"""</span>
<span class="n">kwds</span><span class="p">[</span><span class="s2">"style"</span><span class="p">]</span> <span class="o">=</span> <span class="n">kwds</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"style"</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">|</span> <span class="n">wx</span><span class="o">.</span><span class="n">DEFAULT_FRAME_STYLE</span>
<span class="n">wx</span><span class="o">.</span><span class="n">Frame</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">)</span>
<span class="c1"># start calc window sizes and apply its</span>
<span class="n">dis_width</span><span class="p">,</span> <span class="n">dis_height</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">DisplaySize</span><span class="p">()</span>
<span class="n">dis_width</span> <span class="o">=</span> <span class="n">dis_width</span> <span class="o">-</span> <span class="p">(</span><span class="n">dis_width</span> <span class="o">//</span> <span class="mi">10</span><span class="p">)</span>
<span class="n">dis_height</span> <span class="o">=</span> <span class="n">dis_height</span> <span class="o">-</span> <span class="p">(</span><span class="n">dis_height</span> <span class="o">//</span> <span class="mi">10</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">SetMinClientSize</span><span class="p">((</span><span class="n">dis_width</span><span class="p">,</span> <span class="n">dis_height</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">SetPosition</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">Maximize</span><span class="p">(</span><span class="n">maximize</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
<span class="c1"># end calc window sizes and apply its</span>
<span class="bp">self</span><span class="o">.</span><span class="n">button_4</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="s2">"button_4"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">button_5</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="s2">"button_5"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">Grid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_4</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">Grid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__set_properties</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__do_layout</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">__set_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">"""configure widgets here"""</span>
<span class="bp">self</span><span class="o">.</span><span class="n">SetTitle</span><span class="p">(</span><span class="s2">"My service desk"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span><span class="o">.</span><span class="n">CreateGrid</span><span class="p">(</span><span class="mi">200</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span><span class="o">.</span><span class="n">SetMaxSize</span><span class="p">((</span><span class="mi">400</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span><span class="o">.</span><span class="n">SetColSize</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">330</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span><span class="o">.</span><span class="n">SetRowLabelSize</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span><span class="o">.</span><span class="n">SetCornerLabelValue</span><span class="p">(</span><span class="s2">"№"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span><span class="o">.</span><span class="n">SetColLabelValue</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="s2">"Список заявок"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span><span class="o">.</span><span class="n">SetDefaultRenderer</span><span class="p">(</span><span class="n">CutomGridCellAutoWrapStringRenderer</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span><span class="o">.</span><span class="n">SetCellValue</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'rfb zdfnb dzxngb zdfnb zdfnb zdfnnb zdxfnb zdfnb zdfnb zdnb zdfnb </span><span class="se">\n\n\n</span><span class="s1">szdfrn zdxfngb zdfxn zxfn sdzfnh dzrsfnh zdfxn sdfxng sdgtn sdfn sdxfn '</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_4</span><span class="o">.</span><span class="n">CreateGrid</span><span class="p">(</span><span class="mi">200</span><span class="p">,</span><span class="mi">50</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_4</span><span class="o">.</span><span class="n">SetDefaultRenderer</span><span class="p">(</span><span class="n">CutomGridCellAutoWrapStringRenderer</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_4</span><span class="o">.</span><span class="n">SetSelectionMode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_4</span><span class="o">.</span><span class="n">SelectRows</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__create_table_colors</span><span class="p">()</span>
<span class="c1">######################## СТРАННЫЕ ДЕЛА ТВОРЯТСЯ ЗДЕСЬ ##############################################################</span>
<span class="c1">#"""</span>
<span class="sd">''' вариант 1</span>
<span class="sd"> '''</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_tables_apply_default_colors</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_4</span><span class="o">.</span><span class="n">SetRowAttr</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">work_done_green_row</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_4</span><span class="o">.</span><span class="n">SetRowAttr</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">gray_row</span><span class="p">)</span>
<span class="c1">#"""</span>
<span class="sd">"""</span>
<span class="sd"> ''' вариант 2</span>
<span class="sd"> '''</span>
<span class="sd"> self._tables_apply_default_colors()</span>
<span class="sd"> self.grid_4.SetRowAttr(3, self.work_done_green_row)</span>
<span class="sd"> #self.grid_4.SetRowAttr(3, self.gray_row)</span>
<span class="sd"> #"""</span>
<span class="sd">"""</span>
<span class="sd"> ''' вариант 3</span>
<span class="sd"> '''</span>
<span class="sd"> self._tables_apply_default_colors()</span>
<span class="sd"> #self.grid_4.SetRowAttr(3, self.work_done_green_row)</span>
<span class="sd"> #self.grid_4.SetRowAttr(3, self.gray_row)</span>
<span class="sd"> #"""</span>
<span class="sd">"""</span>
<span class="sd"> ''' вариант 4</span>
<span class="sd"> '''</span>
<span class="sd"> #self._tables_apply_default_colors()</span>
<span class="sd"> self.grid_4.SetRowAttr(3, self.work_done_green_row)</span>
<span class="sd"> self.grid_4.SetRowAttr(3, self.gray_row)</span>
<span class="sd"> #"""</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__connect_slots_at_startup</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">_tables_apply_default_colors</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">"""in this method i apply default table colors"""</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span><span class="o">.</span><span class="n">SetGridLineColour</span><span class="p">(</span><span class="s2">"#cccccc"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_4</span><span class="o">.</span><span class="n">SetGridLineColour</span><span class="p">(</span><span class="s2">"#cccccc"</span><span class="p">)</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span><span class="o">.</span><span class="n">GetNumberRows</span><span class="p">()):</span>
<span class="k">if</span> <span class="p">(</span><span class="n">x</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span><span class="o">.</span><span class="n">SetRowAttr</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">white_row</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span><span class="o">.</span><span class="n">SetRowAttr</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">gray_row</span><span class="p">)</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_4</span><span class="o">.</span><span class="n">GetNumberRows</span><span class="p">()):</span>
<span class="k">if</span> <span class="p">(</span><span class="n">x</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_4</span><span class="o">.</span><span class="n">SetRowAttr</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">white_row</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_4</span><span class="o">.</span><span class="n">SetRowAttr</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">gray_row</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__create_table_colors</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">"""this method create colors for rows"""</span>
<span class="bp">self</span><span class="o">.</span><span class="n">white_row</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">GridCellAttr</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">white_row</span><span class="o">.</span><span class="n">SetBackgroundColour</span><span class="p">(</span><span class="s2">"#ffffff"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">gray_row</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">GridCellAttr</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">gray_row</span><span class="o">.</span><span class="n">SetBackgroundColour</span><span class="p">(</span><span class="s2">"#f3f3f3"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">work_done_green_row</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">GridCellAttr</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">work_done_green_row</span><span class="o">.</span><span class="n">SetBackgroundColour</span><span class="p">(</span><span class="s2">"#98FB98"</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__do_layout</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">""""""</span>
<span class="n">sizer_1</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">VERTICAL</span><span class="p">)</span>
<span class="n">sizer_3</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">HORIZONTAL</span><span class="p">)</span>
<span class="n">sizer_2</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">HORIZONTAL</span><span class="p">)</span>
<span class="n">sizer_2</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">button_4</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">sizer_2</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">button_5</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">sizer_1</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">sizer_2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">sizer_3</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">sizer_3</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_4</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">sizer_1</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">sizer_3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">SetSizer</span><span class="p">(</span><span class="n">sizer_1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">Layout</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">__connect_slots_at_startup</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">grid_3</span><span class="o">.</span><span class="n">Bind</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">EVT_GRID_CELL_LEFT_CLICK</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_slot_grid3_cell_clicked</span><span class="p">)</span>
<span class="c1">############################################################### SLOTS ##################################################################</span>
<span class="k">def</span> <span class="nf">_slot_grid3_cell_clicked</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">evt</span><span class="p">):</span>
<span class="sd">"""здесь получаем имя заявки и передаем ее на подгрузку деталей в таблицу"""</span>
<span class="n">clicked_row</span> <span class="o">=</span> <span class="n">evt</span><span class="o">.</span><span class="n">GetRow</span><span class="p">()</span>
<span class="n">proposal_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span><span class="o">.</span><span class="n">GetCellValue</span><span class="p">(</span><span class="n">clicked_row</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span><span class="o">.</span><span class="n">SelectRow</span><span class="p">(</span><span class="n">clicked_row</span><span class="p">,</span> <span class="n">addToSelected</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">MyApp</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">App</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">OnInit</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">frame</span> <span class="o">=</span> <span class="n">MyFrame</span><span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">SetTopWindow</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">frame</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">Show</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">True</span>
<span class="c1"># end of class MyApp</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span>
<span class="n">app</span> <span class="o">=</span> <span class="n">MyApp</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">MainLoop</span><span class="p">()</span>
</pre></div><br/>вариант 1 выдает такую ошибку:<br/><div class="code"><pre>17:40:01: ������: Unable to set default locale: 'unsupported locale setting'<br/>Traceback (most recent call last):<br/> File "C:\Users\dev\Documents\Python Code\sdesk\guilibs.py", line 173, in OnInit<br/> self.frame = MyFrame(None, wx.ID_ANY, "")<br/> File "C:\Users\dev\Documents\Python Code\sdesk\guilibs.py", line 67, in __init__<br/> self.__set_properties()<br/> File "C:\Users\dev\Documents\Python Code\sdesk\guilibs.py", line 91, in __set_properties<br/> self.grid_4.SetRowAttr(3, self.gray_row)<br/>RuntimeError: wrapped C/C++ object of type GridCellAttr has been deleted<br/>OnInit returned false, exiting...<br/>Error in atexit._run_exitfuncs:<br/>wx._core.wxAssertionError: C++ assertion "m_count > 0" failed at ..\..\src\common\object.cpp(336) in wxRefCounter::DecRef(): invalid ref data count</pre></div><br/>вариант 2 другую (картинка кликабельна):<br/><a href="https://img.radiokot.ru/files/55520/2dk28c991v.png"><img src="https://img.radiokot.ru/files/55520/thumbnail/2dk28c991v.png"></img></a><br/><br/>третий и четвертый работают нормально, где проблема ума не приложу, но раскрашивать строки в процессе работы у меня не выходит. Помогите разобраться что не так.
Общий :: GUI :: помогите с выбором фреймворка
2020-12-06T14:50:27+02:00doza_and213341<blockquote><em>@cckyi_boxxx</em><br/>коммерческая есть, но стоит она совсем неадекватных денег,</blockquote>Ну вообще то ядро Qt на LGPL-v2 Если ограничить функциональность Qt то помоему вы впишетесь в эту лицензию. Это будет не ваша головная боль а юристов которые должны будут это все оформлять.
Общий :: GUI :: помогите с выбором фреймворка
2020-12-05T10:55:02+02:00@cckyi_boxxx213314<strong>doza_and</strong>, спасибо за помощь, буду учить это 100%, просто обычно lgpl не мешали работать, а тут у меня неделя что-бы все закодить, вот и искал что-то максимально похожее на Qt, но под хорошей лицензией что-бы на требование предоставить серверную часть ПО или исходники клиентской смело слать требующего в эротический тур. Сейчас, глядя на ваш код, склоняюсь к тому что-бы сделать за неделю минимально-жизнеспособный продукт на Qt, а потом уже учить wx и перекодить все на него.<br/><br/><strong>Rodegast</strong>, коммерческая есть, но стоит она совсем неадекватных денег, скажем 1000 уев я еще заплатил-бы за пожизненную, но то что требуют они, я столько не зарабатываю на этом, ибо не занимаюсь программированием профессионально, иногда фриланс, или как сейчас потребовалось service desk решение для себя самого и моих заказчиков по совершенно не связанной с программированием теме.
Общий :: GUI :: помогите с выбором фреймворка
2020-12-04T21:20:00+02:00Rodegast213307> на pyqt все проще … Но долбаные лицензии мать имх не дают юзать привычное, надо как-то выкручиваться.<br/><br/>Там есть коммерческая лицензия. Ну и как бы LGPL совсем не GPL.
Общий :: GUI :: помогите с выбором фреймворка
2020-12-04T15:07:05+02:00doza_and213305<blockquote><em>@cckyi_boxxx</em><br/>но стиолкнулся с тем что “управляется” он не так как уже привычные мне фреймворки,</blockquote><blockquote><em>@cckyi_boxxx</em><br/>Есть еще альтернативы, такие-же мощные и при этом bsd, mit и под подобными лицензиями?</blockquote>Альтернатив полно! <br/><a href="https://wiki.python.org/moin/GuiProgramming">https://wiki.python.org/moin/GuiProgramming</a><br/>можно смотреть PyGtk, kivi. sefpython ….<br/>И смею вас уверить, они все будут управляться совершенно не так как Qt. wxPython наверное самая мощная из альтернатив. <br/>Так что собирайте волю в кулак и учите новый фреймворк.<br/><br/>Разобраться в вашем коде довольно сложно.<br/>Мне непонятно зачем вы используете grid если у вас одна колонка. Вам нужен обычный вертикальный разместитель.<br/>Борьба со скроллбарами мне неясна. Ему никакие параетры не надо задават. Скроллбары по умолчанию есть и работают как надо.<br/><br/>Судя по app = wx.PySimpleApp() вы пользуетесь какимито очень древними книжками по WX. найдите чтото посовременнее.<br/><br/>А так да. Инструменты размещения элементов в wx другие. И на мой взгляд они мощнее инструментов Qt :). обратите внимение на параметр Proportion.<br/><div class="code"><pre> <span class="ch">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: UTF-8 -*-</span>
<span class="c1">#</span>
<span class="c1"># generated by wxGlade 0.9.4 on Fri Dec 4 16:14:41 2020</span>
<span class="c1">#</span>
<span class="kn">import</span> <span class="nn">wx</span>
<span class="kn">import</span> <span class="nn">wx.grid</span>
<span class="c1"># begin wxGlade: dependencies</span>
<span class="c1"># end wxGlade</span>
<span class="c1"># begin wxGlade: extracode</span>
<span class="c1"># end wxGlade</span>
<span class="k">class</span> <span class="nc">MyFrame</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">Frame</span><span class="p">):</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="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span>
<span class="c1"># begin wxGlade: MyFrame.__init__</span>
<span class="n">kwds</span><span class="p">[</span><span class="s2">"style"</span><span class="p">]</span> <span class="o">=</span> <span class="n">kwds</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"style"</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">|</span> <span class="n">wx</span><span class="o">.</span><span class="n">DEFAULT_FRAME_STYLE</span>
<span class="n">wx</span><span class="o">.</span><span class="n">Frame</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">SetSize</span><span class="p">((</span><span class="mi">696</span><span class="p">,</span> <span class="mi">533</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">button_4</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="s2">"button_4"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">button_5</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="s2">"button_5"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">Grid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_4</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">Grid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__set_properties</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__do_layout</span><span class="p">()</span>
<span class="c1"># end wxGlade</span>
<span class="k">def</span> <span class="nf">__set_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># begin wxGlade: MyFrame.__set_properties</span>
<span class="bp">self</span><span class="o">.</span><span class="n">SetTitle</span><span class="p">(</span><span class="s2">"frame"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span><span class="o">.</span><span class="n">CreateGrid</span><span class="p">(</span><span class="mi">50</span><span class="p">,</span><span class="mi">50</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid_4</span><span class="o">.</span><span class="n">CreateGrid</span><span class="p">(</span><span class="mi">50</span><span class="p">,</span><span class="mi">50</span><span class="p">)</span>
<span class="c1"># end wxGlade</span>
<span class="k">def</span> <span class="nf">__do_layout</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># begin wxGlade: MyFrame.__do_layout</span>
<span class="n">sizer_1</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">VERTICAL</span><span class="p">)</span>
<span class="n">sizer_3</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">HORIZONTAL</span><span class="p">)</span>
<span class="n">sizer_2</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">HORIZONTAL</span><span class="p">)</span>
<span class="n">sizer_2</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">button_4</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">sizer_2</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">button_5</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">sizer_1</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">sizer_2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">sizer_3</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">sizer_3</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_4</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">sizer_1</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">sizer_3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">EXPAND</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">SetSizer</span><span class="p">(</span><span class="n">sizer_1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">Layout</span><span class="p">()</span>
<span class="c1"># end wxGlade</span>
<span class="c1"># end of class MyFrame</span>
<span class="k">class</span> <span class="nc">MyApp</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">App</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">OnInit</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">frame</span> <span class="o">=</span> <span class="n">MyFrame</span><span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">ID_ANY</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">SetTopWindow</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">frame</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">Show</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">True</span>
<span class="c1"># end of class MyApp</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span>
<span class="n">app</span> <span class="o">=</span> <span class="n">MyApp</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">MainLoop</span><span class="p">()</span>
</pre></div>
Общий :: GUI :: помогите с выбором фреймворка
2020-12-04T09:30:45+02:00@cckyi_boxxx213302Здравствуйте, столкнулся с задачей когда gpl или lgpl библиотеки использовать категорически нельзя, а возможностей Tkinter мало и без огромных костылей не выйдет. Начал выбирать альтернативы уже известным мне PyQt и PySide, попробовал wxpython, но стиолкнулся с тем что “управляется” он не так как уже привычные мне фреймворки, все эти автоматические упаковки в родителя без четкого приказа и многое другое говорит о том что с наскока изучить его, в процессе написания необходимого софта, у меня не выйдет. Есть еще альтернативы, такие-же мощные и при этом bsd, mit и под подобными лицензиями?<br/><br/>Если альтернативы нет то вот на чем я прогорел:<br/><div class="code"><pre> <span class="kn">import</span> <span class="nn">wx</span>
<span class="kn">import</span> <span class="nn">wx.grid</span>
<span class="k">class</span> <span class="nc">GridSizerFrame</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">Frame</span><span class="p">):</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="n">wx</span><span class="o">.</span><span class="n">Frame</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s2">"Basic Grid Sizer"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">SetBackgroundColour</span><span class="p">(</span><span class="s1">'white'</span><span class="p">)</span>
<span class="n">sizer</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">GridSizer</span><span class="p">(</span><span class="n">rows</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">cols</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">hgap</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">vgap</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> <span class="c1"># создание основного сайзера (сетка)</span>
<span class="n">sizer2</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">BoxSizer</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">HORIZONTAL</span><span class="p">)</span> <span class="c1"># создание сайзера для кнопок</span>
<span class="n">but</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'rrr'</span><span class="p">)</span> <span class="c1"># левая кропка пока тупо для вида</span>
<span class="n">but2</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="c1"># левая кропка пока тупо для вида</span>
<span class="c1"># теперь компонуем</span>
<span class="n">sizer2</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">but</span><span class="p">)</span>
<span class="n">sizer2</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">but2</span><span class="p">)</span>
<span class="n">sizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">sizer2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># двойное окно для двух таблиц</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sp</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">SplitterWindow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="n">wx</span><span class="o">.</span><span class="n">DefaultPosition</span><span class="p">,</span>
<span class="n">size</span><span class="o">=</span><span class="n">wx</span><span class="o">.</span><span class="n">DefaultSize</span><span class="p">,</span> <span class="n">style</span><span class="o">=</span><span class="n">wx</span><span class="o">.</span><span class="n">SP_3D</span><span class="p">,</span>
<span class="n">name</span><span class="o">=</span><span class="s2">"splitterWindow"</span><span class="p">)</span>
<span class="n">sizer</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sp</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">flag</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">ALIGN_TOP</span><span class="p">)</span> <span class="c1"># почему-то не работает wx.ALIGN_TOP</span>
<span class="c1"># g1 - первая таблица, </span>
<span class="n">g1</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">Grid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sp</span><span class="p">,</span> <span class="n">style</span><span class="o">=</span><span class="n">wx</span><span class="o">.</span><span class="n">SUNKEN_BORDER</span><span class="p">)</span>
<span class="n">g1</span><span class="o">.</span><span class="n">CreateGrid</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
<span class="n">g1</span><span class="o">.</span><span class="n">SetDefaultColSize</span><span class="p">(</span><span class="mi">300</span><span class="p">,</span> <span class="n">resizeExistingCols</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
<span class="n">g1</span><span class="o">.</span><span class="n">SetScrollbar</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">VERTICAL</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">1000</span><span class="p">,</span> <span class="n">refresh</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
<span class="n">g1</span><span class="o">.</span><span class="n">SetCellValue</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="s1">'butt'</span><span class="p">)</span>
<span class="n">grid</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">Grid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sp</span><span class="p">,</span> <span class="n">style</span><span class="o">=</span><span class="n">wx</span><span class="o">.</span><span class="n">SUNKEN_BORDER</span><span class="p">)</span>
<span class="n">grid</span><span class="o">.</span><span class="n">CreateGrid</span><span class="p">(</span><span class="mi">50</span><span class="p">,</span><span class="mi">50</span><span class="p">)</span>
<span class="n">grid</span><span class="o">.</span><span class="n">SetScrollbar</span><span class="p">(</span><span class="n">wx</span><span class="o">.</span><span class="n">VERTICAL</span><span class="p">,</span> <span class="n">wx</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="n">refresh</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> <span class="c1"># появление скролбара не наблюдается и скролится все криво какие-бы параметры я не стапвил</span>
<span class="c1">#grid.SetScrollbar(orientation, position, thumbSize, range, refresh=True)</span>
<span class="c1"># заполняем таблицы</span>
<span class="n">grid</span><span class="o">.</span><span class="n">SetCellValue</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="s1">'butt'</span><span class="p">)</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">20</span><span class="p">):</span>
<span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">6</span><span class="p">):</span>
<span class="n">grid</span><span class="o">.</span><span class="n">SetCellValue</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">,</span> <span class="s2">"cell (</span><span class="si">%d</span><span class="s2">,</span><span class="si">%d</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">))</span>
<span class="c1">#self.sp.Initialize(g1) # Инициализация разделителя</span>
<span class="c1">#self.sp.Initialize(grid)</span>
<span class="c1"># финиш</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sp</span><span class="o">.</span><span class="n">SplitVertically</span><span class="p">(</span><span class="n">g1</span><span class="p">,</span> <span class="n">grid</span><span class="p">,</span> <span class="n">sashPosition</span><span class="o">=</span><span class="mi">450</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">SetSizer</span><span class="p">(</span><span class="n">sizer</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">Fit</span><span class="p">()</span>
<span class="n">app</span> <span class="o">=</span> <span class="n">wx</span><span class="o">.</span><span class="n">PySimpleApp</span><span class="p">()</span>
<span class="n">GridSizerFrame</span><span class="p">()</span><span class="o">.</span><span class="n">Show</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">MainLoop</span><span class="p">()</span>
</pre></div>после некоторого количества секса с wx смог слепить это, как и ожидалось работает совсем не так как хочется (картинка кликабельна):<br/><a href="https://img.radiokot.ru/files/55520/2dngzdphzg.png"><img src="https://img.radiokot.ru/files/55520/thumbnail/2dngzdphzg.png"></img></a><br/><br/>ps: на pyqt все проще, FormLayout в который две таблицы (он их автоматом обровняет) и тулбар под кнопки, а тут … Но долбаные лицензии мать имх не дают юзать привычное, надо как-то выкручиваться.