Latest posts on pyqt5 не могу нормально прикрутить окно загрузки topichttps://python.su/forum/topic/38496/2020-03-02T00:06:43+02:00Общий :: GUI :: pyqt5 не могу нормально прикрутить окно загрузки
2020-03-02T00:06:43+02:00@cckyi_boxxx207820пока оставлю как есть, а потом думаю ради спортивного интереса попробовать два qapplication запилить и один из них отправить в питонопоток, по идее процессов питона будет 1 а кутэхи 2 и каждый со своим эвентлупом, главное что-бы GIL не насрал мне в карман)))
Общий :: GUI :: pyqt5 не могу нормально прикрутить окно загрузки
2020-03-01T13:49:06+02:00PEHDOM207801<blockquote><em>@cckyi_boxxx</em><br/>ps: кстати в два потока пробовал, не получилось</blockquote>не потоки, процессы, вплоть до того что это будут два разных питонячих процесса, тогда у каждого будет свой event loop.
Общий :: GUI :: pyqt5 не могу нормально прикрутить окно загрузки
2020-02-29T23:06:13+02:00@cckyi_boxxx207796Едрить твою налево ! Вот я тупицца ! Не догадался вместо таймера поставить обычный цикл while и заставить юзера подождать еще пару секунд в качестве платы за красивый нескачкообразный прогрессбар! Двое суток я совокуплялся с ежиком пытаясь прикрутить вызов QApplication.processEvents() из другого потока или прикрутить qeventloop в различные места, а тут такое простое решение! Категорическое вам спасибо!!! <img src="/static/djangobb_forum/img/smilies/big_smile.png" /><br/><br/>ps: кстати в два потока пробовал, не получилось
Общий :: GUI :: pyqt5 не могу нормально прикрутить окно загрузки
2020-02-29T22:12:21+02:00PEHDOM207795<blockquote><em>@cckyi_boxxx</em><br/>class loading_window(QWidget):<br/> # лучше и безопаснее передавать сигналами, этим сигналом главная приложуха говорит насколько она загрузилась<br/> updater = pyqtSignal(signal_inf)<br/><br/></blockquote>эээ если вы передаете сигнал из главной прилжухи в статусбар, то накой вы этот сигнал обьявляете в статусбаре? <br/>Проблема в том что пока у вас выполняется какаято долгоиграющая функция, time.sleep(5) например, обработчик событий блокируется, окно не обновляетьсяи тд.. поэтому не выйдет в одном потоке и окно перерисовывать 10 раз в секунду и одновременно выполнять “тяжелую” функцию. <br/>Как вариант нужно или запускать два процесса одно с окном загрузки, другое с главной приложухой, или применить вот такой “обман”<br/><div class="code"><pre> <span class="c1"># -*- coding: utf-8 -*-</span>
<span class="kn">from</span> <span class="nn">...</span> <span class="c1"># импорты тут такиеже</span>
<span class="k">class</span> <span class="nc">loading_window</span><span class="p">(</span><span class="n">QWidget</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">parrent</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
<span class="sd">"""</span>
<span class="sd"> тут ваще ничего интересного обычное обьявлялово виджетов, см след коммент</span>
<span class="sd"> """</span>
<span class="n">QWidget</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="n">parrent</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">click_count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_loading</span> <span class="o">=</span> <span class="mi">5</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setObjectName</span><span class="p">(</span><span class="s2">"loading"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">resize</span><span class="p">(</span><span class="mi">400</span><span class="p">,</span> <span class="mi">200</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setWindowFlags</span><span class="p">(</span><span class="n">Qt</span><span class="o">.</span><span class="n">WindowStaysOnTopHint</span> <span class="o">|</span> <span class="n">Qt</span><span class="o">.</span><span class="n">FramelessWindowHint</span><span class="p">)</span>
<span class="n">sizePolicy1</span> <span class="o">=</span> <span class="n">QSizePolicy</span><span class="p">(</span><span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Fixed</span><span class="p">,</span> <span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Fixed</span><span class="p">)</span>
<span class="n">sizePolicy1</span><span class="o">.</span><span class="n">setHorizontalStretch</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">sizePolicy1</span><span class="o">.</span><span class="n">setVerticalStretch</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">sizePolicy1</span><span class="o">.</span><span class="n">setHeightForWidth</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sizePolicy</span><span class="p">()</span><span class="o">.</span><span class="n">hasHeightForWidth</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setSizePolicy</span><span class="p">(</span><span class="n">sizePolicy1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setMinimumSize</span><span class="p">(</span><span class="n">QSize</span><span class="p">(</span><span class="mi">400</span><span class="p">,</span> <span class="mi">200</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setMaximumSize</span><span class="p">(</span><span class="n">QSize</span><span class="p">(</span><span class="mi">400</span><span class="p">,</span> <span class="mi">200</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setCursor</span><span class="p">(</span><span class="n">QCursor</span><span class="p">(</span><span class="n">Qt</span><span class="o">.</span><span class="n">WaitCursor</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setContextMenuPolicy</span><span class="p">(</span><span class="n">Qt</span><span class="o">.</span><span class="n">NoContextMenu</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="s2">"background-color: rgb(0, 0, 0);</span><span class="se">\n</span><span class="s2"> border-color: rgb(0, 0, 0);</span><span class="se">\n</span><span class="s2"> alternate-background-color: rgb(0, 0, 0);"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">verticalLayout</span> <span class="o">=</span> <span class="n">QVBoxLayout</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">verticalLayout</span><span class="o">.</span><span class="n">setObjectName</span><span class="p">(</span><span class="s2">"verticalLayout"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setLayout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">verticalLayout</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span> <span class="o">=</span> <span class="n">QProgressBar</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">progressBar</span><span class="o">.</span><span class="n">setProperty</span><span class="p">(</span><span class="s2">"value"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_loading</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span><span class="o">.</span><span class="n">setObjectName</span><span class="p">(</span><span class="s2">"progressBar"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span><span class="o">.</span><span class="n">setFixedHeight</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span><span class="o">.</span><span class="n">setFixedWidth</span><span class="p">(</span><span class="mi">380</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span><span class="o">.</span><span class="n">setTextVisible</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">verticalLayout</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span><span class="p">,</span> <span class="n">Qt</span><span class="o">.</span><span class="n">AlignBottom</span><span class="o">|</span><span class="n">Qt</span><span class="o">.</span><span class="n">AlignLeft</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span> <span class="o">=</span> <span class="n">QLabel</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="n">sizePolicy2</span> <span class="o">=</span> <span class="n">QSizePolicy</span><span class="p">(</span><span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Preferred</span><span class="p">,</span> <span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Fixed</span><span class="p">)</span>
<span class="n">sizePolicy2</span><span class="o">.</span><span class="n">setHorizontalStretch</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">sizePolicy2</span><span class="o">.</span><span class="n">setVerticalStretch</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">sizePolicy2</span><span class="o">.</span><span class="n">setHeightForWidth</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">.</span><span class="n">sizePolicy</span><span class="p">()</span><span class="o">.</span><span class="n">hasHeightForWidth</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">.</span><span class="n">setSizePolicy</span><span class="p">(</span><span class="n">sizePolicy2</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">.</span><span class="n">setCursor</span><span class="p">(</span><span class="n">QCursor</span><span class="p">(</span><span class="n">Qt</span><span class="o">.</span><span class="n">WaitCursor</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">.</span><span class="n">setContextMenuPolicy</span><span class="p">(</span><span class="n">Qt</span><span class="o">.</span><span class="n">NoContextMenu</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="s2">"color: rgb(170, 170, 255);"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">.</span><span class="n">setTextInteractionFlags</span><span class="p">(</span><span class="n">Qt</span><span class="o">.</span><span class="n">NoTextInteraction</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">.</span><span class="n">setObjectName</span><span class="p">(</span><span class="s2">"label"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">verticalLayout</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="p">,</span> <span class="n">Qt</span><span class="o">.</span><span class="n">AlignBottom</span><span class="o">|</span><span class="n">Qt</span><span class="o">.</span><span class="n">AlignLeft</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">verticalLayout</span><span class="o">.</span><span class="n">setAlignment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span><span class="p">,</span> <span class="n">Qt</span><span class="o">.</span><span class="n">AlignBottom</span><span class="o">|</span><span class="n">Qt</span><span class="o">.</span><span class="n">AlignLeading</span><span class="o">|</span><span class="n">Qt</span><span class="o">.</span><span class="n">AlignLeft</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">.</span><span class="n">setText</span><span class="p">(</span><span class="s2">"loading..."</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">update_progress_bar</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span>
<span class="n">curval</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span><span class="o">.</span><span class="n">property</span><span class="p">(</span><span class="s1">'value'</span><span class="p">)</span>
<span class="k">while</span> <span class="n">curval</span> <span class="o"><</span> <span class="n">val</span><span class="p">:</span>
<span class="n">curval</span> <span class="o">+=</span><span class="mi">1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span><span class="o">.</span><span class="n">setProperty</span><span class="p">(</span><span class="s1">'value'</span> <span class="p">,</span> <span class="n">curval</span><span class="p">)</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.1</span><span class="p">)</span>
<span class="n">QApplication</span><span class="o">.</span><span class="n">processEvents</span><span class="p">()</span>
<span class="k">class</span> <span class="nc">acc</span><span class="p">(</span><span class="n">QMainWindow</span><span class="p">):</span>
<span class="n">loaded</span> <span class="o">=</span> <span class="n">pyqtSignal</span><span class="p">(</span><span class="nb">int</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">loader</span> <span class="p">,</span> <span class="n">parrent</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loader</span> <span class="o">=</span> <span class="n">loader</span>
<span class="n">QMainWindow</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="n">parrent</span><span class="p">)</span>
<span class="sd">"""</span>
<span class="sd"> перенес всю инициализацию в метод linit, для того что-бы перед и нициализацией всего дерьма</span>
<span class="sd"> иметь возможность поместить сюда ссылки на объекты классов loading_window, QApplication и прочих</span>
<span class="sd"> а так-же вести инициализацию из другого потока</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">linit</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">loaded</span><span class="o">.</span><span class="n">emit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="s1">'import modules'</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loaded</span><span class="o">.</span><span class="n">emit</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="s1">'load GUI'</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loaded</span><span class="o">.</span><span class="n">emit</span><span class="p">(</span><span class="mi">40</span><span class="p">)</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="s1">'import data'</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loaded</span><span class="o">.</span><span class="n">emit</span><span class="p">(</span><span class="mi">60</span><span class="p">)</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="s1">'other shit'</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loaded</span><span class="o">.</span><span class="n">emit</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loader</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
<span class="n">app</span> <span class="o">=</span> <span class="n">QApplication</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">)</span>
<span class="n">loader</span> <span class="o">=</span> <span class="n">loading_window</span><span class="p">()</span> <span class="c1">#создаем окно прогреса заргузки</span>
<span class="n">wnd</span> <span class="o">=</span> <span class="n">acc</span><span class="p">(</span><span class="n">loader</span><span class="p">)</span> <span class="c1"># создаем основное окно</span>
<span class="n">wnd</span><span class="o">.</span><span class="n">loaded</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">loader</span><span class="o">.</span><span class="n">update_progress_bar</span><span class="p">)</span> <span class="c1"># соединяем сигналом</span>
<span class="n">wnd</span><span class="o">.</span><span class="n">linit</span><span class="p">()</span> <span class="c1">#запускаем инициализацию главного окна.</span>
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">exec_</span><span class="p">())</span>
</pre></div>
Общий :: GUI :: pyqt5 не могу нормально прикрутить окно загрузки
2020-02-29T17:41:04+02:00@cckyi_boxxx207786Короче проблема такая, есть приложуха которая ну оооооочень долго грузит гуй и модули, сек 30 точно, поэтому было решено юзеру отобразить весь процесс загрузки, заодно в случае зависания можно будет глянуть на каком модуле оно случилось.<br/><br/>для реализации этой задачи состряпал два класса , один легкий - собсна окно загрузки, второй мощный (в оригинале около 900 строк <img src="/static/djangobb_forum/img/smilies/yikes.png" /> , сюда естественно все ненужное вырезал , оставил основняк, см код ниже.<br/><br/>проблема в том что я не могу заставить приложуху постоянно работать и обрабатывать сигналы до вызова app.exec_() , без этого максимум что я могу это резко перемещать прогрессбар, а так что-бы класс основного окна по мере прогрузки давал данные окну загрузки и оно работало как самостоятельное приложение - не выходит.<br/><br/>уже вторые сутки бьюсь не могу запилить это дерьмо<br/><br/><div class="code"><pre> <span class="c1"># -*- coding: utf-8 -*-</span>
<span class="kn">from</span> <span class="nn">PyQt5.QtWidgets</span> <span class="kn">import</span> <span class="n">QApplication</span><span class="p">,</span> <span class="n">QWidget</span><span class="p">,</span> <span class="n">QVBoxLayout</span><span class="p">,</span> <span class="n">QFrame</span><span class="p">,</span> <span class="n">QPushButton</span><span class="p">,</span> <span class="n">QHBoxLayout</span><span class="p">,</span> <span class="n">QMainWindow</span><span class="p">,</span> <span class="n">QAction</span><span class="p">,</span> \
<span class="n">QGridLayout</span><span class="p">,</span> <span class="n">QRadioButton</span><span class="p">,</span> <span class="n">QLabel</span><span class="p">,</span> <span class="n">QCheckBox</span><span class="p">,</span> <span class="n">QTableWidgetItem</span><span class="p">,</span> <span class="n">QTableWidget</span><span class="p">,</span> <span class="n">QCompleter</span><span class="p">,</span> <span class="n">QComboBox</span><span class="p">,</span> <span class="n">QLineEdit</span><span class="p">,</span> <span class="n">QToolBar</span><span class="p">,</span> \
<span class="n">QComboBox</span><span class="p">,</span> <span class="n">QStatusBar</span><span class="p">,</span> <span class="n">QSizePolicy</span><span class="p">,</span> <span class="n">QProgressBar</span><span class="p">,</span> <span class="n">QMessageBox</span>
<span class="kn">from</span> <span class="nn">PyQt5.QtGui</span> <span class="kn">import</span> <span class="n">QFocusEvent</span><span class="p">,</span> <span class="n">QIcon</span><span class="p">,</span> <span class="n">QPixmap</span><span class="p">,</span> <span class="n">QCursor</span>
<span class="kn">from</span> <span class="nn">PyQt5.QtCore</span> <span class="kn">import</span> <span class="n">pyqtSignal</span> <span class="p">,</span> <span class="n">QEventLoop</span> <span class="p">,</span> <span class="n">QUrl</span> <span class="p">,</span> <span class="n">QThread</span> <span class="p">,</span> <span class="n">QObject</span> <span class="p">,</span> <span class="n">QTimer</span><span class="p">,</span> <span class="n">QStringListModel</span><span class="p">,</span> <span class="n">QEvent</span><span class="p">,</span> <span class="n">Qt</span><span class="p">,</span> <span class="n">QRect</span><span class="p">,</span> \
<span class="n">QSize</span>
<span class="kn">import</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">importlib</span><span class="o">,</span> <span class="nn">time</span>
<span class="kn">import</span> <span class="nn">_thread</span> <span class="kn">as</span> <span class="nn">thread</span>
<span class="k">class</span> <span class="nc">signal_inf</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">msg</span> <span class="o">=</span> <span class="s1">''</span><span class="p">,</span> <span class="n">state</span> <span class="o">=</span> <span class="mi">5</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span>
<span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="n">state</span>
<span class="k">class</span> <span class="nc">loading_window</span><span class="p">(</span><span class="n">QWidget</span><span class="p">):</span>
<span class="c1"># лучше и безопаснее передавать сигналами, этим сигналом главная приложуха говорит насколько она загрузилась</span>
<span class="n">updater</span> <span class="o">=</span> <span class="n">pyqtSignal</span><span class="p">(</span><span class="n">signal_inf</span><span class="p">)</span>
<span class="c1"># В эту переменную позже переместим обьект класса основного окна (наследника QMainWindow),пока пусть висит что-б автодополнение в ИДЕ было</span>
<span class="n">mainobj</span> <span class="o">=</span> <span class="n">QMainWindow</span>
<span class="c1"># не помню почему м не показалось удобнее использовать свою переменную нежели стандартные ср-ва qt, да и пох как показометр работает</span>
<span class="n">notshow</span> <span class="o">=</span> <span class="bp">True</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">parrent</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
<span class="sd">"""</span>
<span class="sd"> тут ваще ничего интересного обычное обьявлялово виджетов, см след коммент</span>
<span class="sd"> """</span>
<span class="n">QWidget</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="n">parrent</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">click_count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_loading</span> <span class="o">=</span> <span class="mi">5</span>
<span class="bp">self</span><span class="o">.</span><span class="n">updater</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">updater_handler</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setObjectName</span><span class="p">(</span><span class="s2">"loading"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">resize</span><span class="p">(</span><span class="mi">400</span><span class="p">,</span> <span class="mi">200</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setWindowFlags</span><span class="p">(</span><span class="n">Qt</span><span class="o">.</span><span class="n">WindowStaysOnTopHint</span> <span class="o">|</span> <span class="n">Qt</span><span class="o">.</span><span class="n">FramelessWindowHint</span><span class="p">)</span>
<span class="n">sizePolicy1</span> <span class="o">=</span> <span class="n">QSizePolicy</span><span class="p">(</span><span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Fixed</span><span class="p">,</span> <span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Fixed</span><span class="p">)</span>
<span class="n">sizePolicy1</span><span class="o">.</span><span class="n">setHorizontalStretch</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">sizePolicy1</span><span class="o">.</span><span class="n">setVerticalStretch</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">sizePolicy1</span><span class="o">.</span><span class="n">setHeightForWidth</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sizePolicy</span><span class="p">()</span><span class="o">.</span><span class="n">hasHeightForWidth</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setSizePolicy</span><span class="p">(</span><span class="n">sizePolicy1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setMinimumSize</span><span class="p">(</span><span class="n">QSize</span><span class="p">(</span><span class="mi">400</span><span class="p">,</span> <span class="mi">200</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setMaximumSize</span><span class="p">(</span><span class="n">QSize</span><span class="p">(</span><span class="mi">400</span><span class="p">,</span> <span class="mi">200</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setCursor</span><span class="p">(</span><span class="n">QCursor</span><span class="p">(</span><span class="n">Qt</span><span class="o">.</span><span class="n">WaitCursor</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setContextMenuPolicy</span><span class="p">(</span><span class="n">Qt</span><span class="o">.</span><span class="n">NoContextMenu</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="s2">"background-color: rgb(0, 0, 0);</span><span class="se">\n</span><span class="s2"> border-color: rgb(0, 0, 0);</span><span class="se">\n</span><span class="s2"> alternate-background-color: rgb(0, 0, 0);"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">verticalLayout</span> <span class="o">=</span> <span class="n">QVBoxLayout</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">verticalLayout</span><span class="o">.</span><span class="n">setObjectName</span><span class="p">(</span><span class="s2">"verticalLayout"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setLayout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">verticalLayout</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span> <span class="o">=</span> <span class="n">QProgressBar</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">progressBar</span><span class="o">.</span><span class="n">setProperty</span><span class="p">(</span><span class="s2">"value"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_loading</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span><span class="o">.</span><span class="n">setObjectName</span><span class="p">(</span><span class="s2">"progressBar"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span><span class="o">.</span><span class="n">setFixedHeight</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span><span class="o">.</span><span class="n">setFixedWidth</span><span class="p">(</span><span class="mi">380</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span><span class="o">.</span><span class="n">setTextVisible</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">verticalLayout</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span><span class="p">,</span> <span class="n">Qt</span><span class="o">.</span><span class="n">AlignBottom</span><span class="o">|</span><span class="n">Qt</span><span class="o">.</span><span class="n">AlignLeft</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span> <span class="o">=</span> <span class="n">QLabel</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="n">sizePolicy2</span> <span class="o">=</span> <span class="n">QSizePolicy</span><span class="p">(</span><span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Preferred</span><span class="p">,</span> <span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Fixed</span><span class="p">)</span>
<span class="n">sizePolicy2</span><span class="o">.</span><span class="n">setHorizontalStretch</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">sizePolicy2</span><span class="o">.</span><span class="n">setVerticalStretch</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">sizePolicy2</span><span class="o">.</span><span class="n">setHeightForWidth</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">.</span><span class="n">sizePolicy</span><span class="p">()</span><span class="o">.</span><span class="n">hasHeightForWidth</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">.</span><span class="n">setSizePolicy</span><span class="p">(</span><span class="n">sizePolicy2</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">.</span><span class="n">setCursor</span><span class="p">(</span><span class="n">QCursor</span><span class="p">(</span><span class="n">Qt</span><span class="o">.</span><span class="n">WaitCursor</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">.</span><span class="n">setContextMenuPolicy</span><span class="p">(</span><span class="n">Qt</span><span class="o">.</span><span class="n">NoContextMenu</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="s2">"color: rgb(170, 170, 255);"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">.</span><span class="n">setTextInteractionFlags</span><span class="p">(</span><span class="n">Qt</span><span class="o">.</span><span class="n">NoTextInteraction</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">.</span><span class="n">setObjectName</span><span class="p">(</span><span class="s2">"label"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">verticalLayout</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="p">,</span> <span class="n">Qt</span><span class="o">.</span><span class="n">AlignBottom</span><span class="o">|</span><span class="n">Qt</span><span class="o">.</span><span class="n">AlignLeft</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">verticalLayout</span><span class="o">.</span><span class="n">setAlignment</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span><span class="p">,</span> <span class="n">Qt</span><span class="o">.</span><span class="n">AlignBottom</span><span class="o">|</span><span class="n">Qt</span><span class="o">.</span><span class="n">AlignLeading</span><span class="o">|</span><span class="n">Qt</span><span class="o">.</span><span class="n">AlignLeft</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">.</span><span class="n">setText</span><span class="p">(</span><span class="s2">"loading..."</span><span class="p">)</span>
<span class="c1"># этот таймер отвечает за плавное перемещение полосы загрузки, для наглядности стоит 100мсек, для боевого режима лучше 10 - 15</span>
<span class="bp">self</span><span class="o">.</span><span class="n">utimer</span> <span class="o">=</span> <span class="n">QTimer</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">utimer</span><span class="o">.</span><span class="n">timeout</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">update_progress_bar</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">utimer</span><span class="o">.</span><span class="n">start</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">update_progress_bar</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">curval</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span><span class="o">.</span><span class="n">property</span><span class="p">(</span><span class="s1">'value'</span><span class="p">)</span>
<span class="k">if</span> <span class="n">curval</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_loading</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">progressBar</span><span class="o">.</span><span class="n">setProperty</span><span class="p">(</span><span class="s1">'value'</span> <span class="p">,</span> <span class="n">curval</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="n">curval</span> <span class="o">==</span> <span class="mi">100</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mainobj</span><span class="o">.</span><span class="n">showMaximized</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">exit_loader</span><span class="p">()</span>
<span class="sd">"""</span>
<span class="sd"> # одна из попыток заставить все работать плавно, эх как-же зае*ло отсутствие готового инструмента для типовой задачи</span>
<span class="sd"> try:</span>
<span class="sd"> self.mainobj.appl.processEvents()</span>
<span class="sd"> print('ok self.appl.processEvents()')</span>
<span class="sd"> except:</span>
<span class="sd"> print('err self.appl.processEvents()')</span>
<span class="sd"> #"""</span>
<span class="c1"># если юзер клацает по нашему окну загрузки значит что-то не нравится, предложим закрыть все</span>
<span class="k">def</span> <span class="nf">mouseDoubleClickEvent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__exit_all</span><span class="p">()</span>
<span class="c1"># если юзер клацает по нашему окну загрузки значит что-то не нравится, предложим закрыть все</span>
<span class="k">def</span> <span class="nf">mousePressEvent</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">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__exit_all</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">showEvent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">notshow</span> <span class="o">=</span> <span class="bp">False</span>
<span class="c1"># если юзер клацает по нашему окну загрузки значит что-то не нравится, предложим закрыть все</span>
<span class="k">def</span> <span class="nf">ok_exit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">msg</span> <span class="o">=</span> <span class="n">QMessageBox</span><span class="p">()</span>
<span class="n">msg</span><span class="o">.</span><span class="n">setWindowTitle</span><span class="p">(</span><span class="s2">"STOP"</span><span class="p">)</span>
<span class="n">msg</span><span class="o">.</span><span class="n">setText</span><span class="p">(</span><span class="s2">"Are you sure you want to close the program?"</span><span class="p">)</span>
<span class="n">msg</span><span class="o">.</span><span class="n">setStandardButtons</span><span class="p">(</span><span class="n">QMessageBox</span><span class="o">.</span><span class="n">Ok</span> <span class="o">|</span> <span class="n">QMessageBox</span><span class="o">.</span><span class="n">Cancel</span><span class="p">)</span>
<span class="n">retval</span> <span class="o">=</span> <span class="n">msg</span><span class="o">.</span><span class="n">exec_</span><span class="p">()</span>
<span class="k">return</span> <span class="n">retval</span> <span class="o">==</span> <span class="n">QMessageBox</span><span class="o">.</span><span class="n">Ok</span>
<span class="k">def</span> <span class="nf">updater_handler</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="sd">"""сюда при помощи сигнала вызванного главным окном (которое еще грузится) передаем его текущее состояние"""</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current_loading</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">state</span>
<span class="k">if</span> <span class="n">data</span><span class="o">.</span><span class="n">msg</span> <span class="o">!=</span> <span class="s1">''</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label</span><span class="o">.</span><span class="n">setText</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">msg</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">exit_loader</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">utimer</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">__exit_all</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">click_count</span> <span class="o">></span> <span class="mi">5</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ok_exit</span><span class="p">():</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mainobj</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">exit_loader</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">click_count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">click_count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">class</span> <span class="nc">onload_event_proc</span><span class="p">(</span><span class="n">QThread</span><span class="p">):</span>
<span class="n">appl</span> <span class="o">=</span> <span class="n">QApplication</span> <span class="c1"># что-б работало автодополнение в IDE, использоваться будет в __main__ заменой на обьект класса QApplication()</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">parent</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
<span class="n">QThread</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">self</span><span class="o">.</span><span class="n">ss</span> <span class="o">=</span> <span class="bp">True</span>
<span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">ss</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msleep</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">appl</span><span class="o">.</span><span class="n">processEvents</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">stop_ld_events</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">ss</span> <span class="o">=</span> <span class="bp">False</span>
<span class="n">cnt</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">isRunning</span><span class="p">():</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.001</span><span class="p">)</span>
<span class="k">if</span> <span class="n">cnt</span> <span class="o">></span> <span class="mi">20</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">terminate</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">cnt</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">class</span> <span class="nc">callbacker_thread</span><span class="p">(</span><span class="n">QThread</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">task</span> <span class="p">,</span> <span class="n">parent</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
<span class="n">QThread</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="n">parent</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task</span> <span class="o">=</span> <span class="n">task</span>
<span class="k">def</span> <span class="nf">run</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">task</span><span class="p">()</span>
<span class="k">class</span> <span class="nc">acc</span><span class="p">(</span><span class="n">QMainWindow</span><span class="p">):</span>
<span class="n">loader</span> <span class="o">=</span> <span class="n">loading_window</span> <span class="c1"># что-б работало автодополнение в IDE, использоваться будет в __main__ заменой на обьект класса loading_window()</span>
<span class="n">appl_ev</span> <span class="o">=</span> <span class="n">onload_event_proc</span><span class="p">()</span>
<span class="n">appl</span> <span class="o">=</span> <span class="n">QApplication</span> <span class="c1"># та-же история что и с loading_window</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">parrent</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
<span class="n">QMainWindow</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="n">parrent</span><span class="p">)</span>
<span class="sd">"""</span>
<span class="sd"> перенес всю инициализацию в метод linit, для того что-бы перед и нициализацией всего дерьма</span>
<span class="sd"> иметь возможность поместить сюда ссылки на объекты классов loading_window, QApplication и прочих</span>
<span class="sd"> а так-же вести инициализацию из другого потока</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">linit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">loader</span><span class="o">.</span><span class="n">notshow</span><span class="p">:</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.05</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loader</span><span class="o">.</span><span class="n">updater</span><span class="o">.</span><span class="n">emit</span><span class="p">(</span><span class="n">signal_inf</span><span class="p">(</span><span class="s1">'loading graphical components'</span><span class="p">,</span> <span class="mi">10</span><span class="p">))</span>
<span class="c1">#self.appl.processEvents()</span>
<span class="c1"># для форума большую часть виджетов вынес, на этот блок можно не обращать внимания</span>
<span class="bp">self</span><span class="o">.</span><span class="n">centralwidget</span> <span class="o">=</span> <span class="n">QWidget</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">centralwidget</span><span class="o">.</span><span class="n">setObjectName</span><span class="p">(</span><span class="s2">"centralwidget"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setCentralWidget</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">centralwidget</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">central_layout</span> <span class="o">=</span> <span class="n">QVBoxLayout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">centralwidget</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">centralwidget</span><span class="o">.</span><span class="n">setLayout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">central_layout</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">toolBar</span> <span class="o">=</span> <span class="n">QToolBar</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">toolBar</span><span class="o">.</span><span class="n">setObjectName</span><span class="p">(</span><span class="s2">"toolBar"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">toolBar</span><span class="o">.</span><span class="n">setMovable</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">addToolBar</span><span class="p">(</span><span class="n">Qt</span><span class="o">.</span><span class="n">TopToolBarArea</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">toolBar</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">config_button</span> <span class="o">=</span> <span class="n">QPushButton</span><span class="p">(</span><span class="s1">'Config'</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">toolBar</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">config_button</span><span class="p">)</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</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">loader</span><span class="o">.</span><span class="n">updater</span><span class="o">.</span><span class="n">emit</span><span class="p">(</span><span class="n">signal_inf</span><span class="p">(</span><span class="s1">'loading controll triggers'</span><span class="p">,</span> <span class="mi">20</span><span class="p">))</span>
<span class="c1">#self.appl.processEvents()</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loader</span><span class="o">.</span><span class="n">updater</span><span class="o">.</span><span class="n">emit</span><span class="p">(</span><span class="n">signal_inf</span><span class="p">(</span><span class="s1">'loading global settings'</span><span class="p">,</span> <span class="mi">30</span><span class="p">))</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loader</span><span class="o">.</span><span class="n">updater</span><span class="o">.</span><span class="n">emit</span><span class="p">(</span><span class="n">signal_inf</span><span class="p">(</span><span class="s1">'loading stage'</span><span class="p">,</span> <span class="mi">40</span><span class="p">))</span>
<span class="c1">#self.appl.processEvents()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loader</span><span class="o">.</span><span class="n">updater</span><span class="o">.</span><span class="n">emit</span><span class="p">(</span><span class="n">signal_inf</span><span class="p">(</span><span class="s1">''</span><span class="p">,</span> <span class="mi">100</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">run_app_event_processor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">qapplic</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">appl_ev</span><span class="o">.</span><span class="n">appl</span> <span class="o">=</span> <span class="n">qapplic</span>
<span class="bp">self</span><span class="o">.</span><span class="n">appl_ev</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
<span class="n">app</span> <span class="o">=</span> <span class="n">QApplication</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">)</span>
<span class="n">wnd</span> <span class="o">=</span> <span class="n">acc</span><span class="p">()</span> <span class="c1"># создаем основное окно</span>
<span class="n">wnd</span><span class="o">.</span><span class="n">loader</span> <span class="o">=</span> <span class="n">loading_window</span><span class="p">()</span> <span class="c1"># создаем окно загрузчика и помещаем его внутрь обьекта главного окна что-бы иметь к нему доступ оттуда</span>
<span class="n">wnd</span><span class="o">.</span><span class="n">appl</span> <span class="o">=</span> <span class="n">app</span> <span class="c1"># даем главному окну доступ к обьекту QApplication</span>
<span class="c1">#wnd.loader.setParent(wnd)</span>
<span class="c1"># даем окну загрузчика ссылку на главное окно что-бы он по достижении прогрессбаром 100% мог вызвать show у главного окна</span>
<span class="n">wnd</span><span class="o">.</span><span class="n">loader</span><span class="o">.</span><span class="n">mainobj</span> <span class="o">=</span> <span class="n">wnd</span>
<span class="n">wnd</span><span class="o">.</span><span class="n">loader</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
<span class="c1">#wnd.run_app_event_processor(app) # как-то совсем плохо все при таком способе</span>
<span class="sd">"""</span>
<span class="sd"> когда загрузку виджетов, плагинов и прочего отправляю в поток, в этой версии (для форума),</span>
<span class="sd"> где вырезана целая куча виджетов и модулей просто не прогружается гуй (нет тулбара и кнопки на нем)</span>
<span class="sd"> в более сложной версии получаю вылет (скорее всего потому что пытаюсь использовать не размещенные виджеты)</span>
<span class="sd"> </span>
<span class="sd"> так отрабатывает как в случае с модулем thread так и с QThread (см 3 строки ниже)</span>
<span class="sd"> """</span>
<span class="c1">#thread.start_new_thread(wnd.linit, () ) </span>
<span class="c1">#fuck = callbacker_thread(wnd.linit , wnd) </span>
<span class="c1">#fuck.start()</span>
<span class="sd">"""</span>
<span class="sd"> если вызывать wnd.linit() так как это сделано ниже и раскоментить все вызовы self.appl.processEvents() внутри </span>
<span class="sd"> wnd.linit() то все работает но криво, прогресс бар не идет плавно до установленной точки, а делает лтишь один рывок, </span>
<span class="sd"> и плавно идет лишь после вызова app.exec_()</span>
<span class="sd"> """</span>
<span class="n">wnd</span><span class="o">.</span><span class="n">linit</span><span class="p">()</span>
<span class="c1">#wnd.showMaximized() позднее принял решение вызывать из окна "загрузчика" по достижении на прогресс баре 100%</span>
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">exec_</span><span class="p">())</span>
</pre></div>