Latest posts on Как сделать модальное окно без диалога? topichttps://python.su/forum/topic/42024/2022-10-07T15:50:38+03:00Общий :: GUI :: Как сделать модальное окно без диалога?
2022-10-07T15:50:38+03:00Vovsla224297Есть основное окно программы, в котором будут производиться различные действия по нажатию кнопки.<br/>На время обработки запроса необходимо выводить всплывающее уведомление об обработке запроса с блокировкой основного окна.<br/>У меня получается отображать только модальное окно с заголовком, без текста и оно доступно для перетаскивания. При отключении заголовка через setWindowFlags окно вообще не отображается.<br/><br/>Хотелось бы отображать что-то вроде элемента “ToolTip” по центру родительского окна, в котором есть только текст, нет заголовка и окно было бы недоступно для взаимодействия, перетаскивание и т.д.<br/>Как это можно сделать?<br/><br/><div class="code"><pre> <span class="kn">from</span> <span class="nn">PyQt5.QtCore</span> <span class="kn">import</span> <span class="n">Qt</span>
<span class="kn">from</span> <span class="nn">PyQt5.QtWidgets</span> <span class="kn">import</span> <span class="p">(</span><span class="n">QWidget</span><span class="p">,</span>
<span class="n">QApplication</span><span class="p">,</span>
<span class="n">QDesktopWidget</span><span class="p">,</span>
<span class="n">QGridLayout</span><span class="p">,</span>
<span class="n">QPushButton</span><span class="p">,</span>
<span class="n">QDialog</span><span class="p">,</span>
<span class="n">QLabel</span><span class="p">,</span>
<span class="p">)</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="k">class</span> <span class="nc">Gui</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="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</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">320</span><span class="p">,</span> <span class="mi">240</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setWindowTitle</span><span class="p">(</span><span class="s1">'Test'</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid</span> <span class="o">=</span> <span class="n">QGridLayout</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">button</span> <span class="o">=</span> <span class="n">QPushButton</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid</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">button</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">button</span><span class="o">.</span><span class="n">setText</span><span class="p">(</span><span class="s1">'Button'</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">button</span><span class="o">.</span><span class="n">clicked</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">show_win</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">modal</span> <span class="o">=</span> <span class="n">QDialog</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="c1"># self.modal.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowTitleHint)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">modal</span><span class="o">.</span><span class="n">resize</span><span class="p">(</span><span class="mi">200</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">modal</span><span class="o">.</span><span class="n">setModal</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid2</span> <span class="o">=</span> <span class="n">QGridLayout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">modal</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label2</span> <span class="o">=</span> <span class="n">QLabel</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">label2</span><span class="o">.</span><span class="n">setText</span><span class="p">(</span><span class="s1">'info'</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">grid2</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">label2</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">move_center</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">show_win</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">print</span><span class="p">(</span><span class="s1">'tst'</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">modal</span><span class="o">.</span><span class="n">show</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="bp">self</span><span class="o">.</span><span class="n">modal</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">move_center</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">fg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">frameGeometry</span><span class="p">()</span>
<span class="n">ac</span> <span class="o">=</span> <span class="n">QDesktopWidget</span><span class="p">()</span><span class="o">.</span><span class="n">availableGeometry</span><span class="p">()</span><span class="o">.</span><span class="n">center</span><span class="p">()</span>
<span class="n">fg</span><span class="o">.</span><span class="n">moveCenter</span><span class="p">(</span><span class="n">ac</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="n">fg</span><span class="o">.</span><span class="n">topLeft</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">show_gui</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">gui</span> <span class="o">=</span> <span class="n">Gui</span><span class="p">()</span>
<span class="n">gui</span><span class="o">.</span><span class="n">show</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>