Latest posts on PyQt +сделать окно поверх всех topichttp://python.su/forum/topic/4289/2018-10-11T21:12:09+03:00Общий :: GUI :: PyQt +сделать окно поверх всех
2018-10-11T21:12:09+03:00john2103195807Всем доброго времени суток! Помогите с этим же вопросом. Я не давно начал изучать питон. Хочу сделать, что бы по нажатию на кнопку Test, форма становилась поверх всего(включая панель задач)… Прочитав все что было выше, мне это не помогло. Причем, если добавить <div class="code"><pre> <span class="bp">self</span><span class="o">.</span><span class="n">setWindowFlags</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">windowFlags</span><span class="p">()</span> <span class="o">|</span> <span class="n">QtCore</span><span class="o">.</span><span class="n">Qt</span><span class="o">.</span><span class="n">WindowStaysOnTopHint</span><span class="p">)</span>
</pre></div>в __init__ это работает, но по кнопке не работает. <br/>Код моего скрипта<br/><div class="code"><pre> <span class="kn">import</span> <span class="nn">sys</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">QPushButton</span><span class="p">,</span> <span class="n">QVBoxLayout</span><span class="p">,</span> <span class="n">QMainWindow</span><span class="p">,</span> <span class="n">QLabel</span><span class="p">,</span> <span class="n">QDesktopWidget</span><span class="p">,</span> \
<span class="n">QProgressBar</span><span class="p">,</span> <span class="n">QHBoxLayout</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">QIcon</span><span class="p">,</span> <span class="n">QBitmap</span><span class="p">,</span> <span class="n">QColor</span><span class="p">,</span> <span class="n">QFont</span><span class="p">,</span> <span class="n">QPixmap</span>
<span class="kn">from</span> <span class="nn">PyQt5.QtCore</span> <span class="kn">import</span> <span class="n">QBasicTimer</span>
<span class="kn">from</span> <span class="nn">PyQt5</span> <span class="kn">import</span> <span class="n">QtCore</span>
<span class="k">class</span> <span class="nc">Main</span><span class="p">(</span><span class="n">QMainWindow</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">setMinimumSize</span><span class="p">(</span><span class="mi">640</span><span class="p">,</span> <span class="mi">480</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">'Окно родитель всех форм'</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="mi">500</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">center</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">Creat_label</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">test</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">center</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">qr</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">cp</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">qr</span><span class="o">.</span><span class="n">moveCenter</span><span class="p">(</span><span class="n">cp</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">qr</span><span class="o">.</span><span class="n">topLeft</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="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">width</span><span class="p">(),</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">height</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">Creat_label</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="n">QLabel</span><span class="p">(</span><span class="s1">'Text'</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="n">setText</span><span class="p">(</span><span class="nb">str</span><span class="p">(</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="n">label</span><span class="o">.</span><span class="n">resize</span><span class="p">(</span><span class="n">label</span><span class="o">.</span><span class="n">sizeHint</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">exit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">button</span> <span class="o">=</span> <span class="n">QPushButton</span><span class="p">(</span><span class="s1">'Exit'</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</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">close</span><span class="p">)</span>
<span class="n">button</span><span class="o">.</span><span class="n">move</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="k">def</span> <span class="nf">test</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">button</span> <span class="o">=</span> <span class="n">QPushButton</span><span class="p">(</span><span class="s1">'Test'</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</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">test_func</span><span class="p">)</span>
<span class="n">button</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="mi">150</span><span class="p">,</span> <span class="mi">50</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">test_func</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">setWindowFlags</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">windowFlags</span><span class="p">()</span> <span class="o">|</span> <span class="n">QtCore</span><span class="o">.</span><span class="n">Qt</span><span class="o">.</span><span class="n">WindowStaysOnTopHint</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">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">ex</span> <span class="o">=</span> <span class="n">Main</span><span class="p">()</span>
<span class="n">ex</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>
Общий :: GUI :: PyQt +сделать окно поверх всех
2018-01-20T21:44:12+02:00PEHDOM188863<blockquote><em>Kyrym</em><br/>А если прописать через self.hide() выход будет правильным?</blockquote>если поставить self.hide() выхода вообще не будет, оно скроет ваше окно но обработчик событый будет по прежнему работать.<br/><blockquote><em>Kyrym</em><br/>Если на кнопку, то у меня не работает. </blockquote>ХЗ вроде работает и на кнопку и так..<br/><blockquote><em>Kyrym</em><br/>Что-то не пойму, эта функция куда ставится?</blockquote>Никуда не ставится, это переопределенная функуия, вызываеться автоматически при закрытии окна. Вы можете изменить ее поведения, например вписа туда далоговое окно, типа “документ не сохранен, сохранить да/нет”. Или написать event.ignore(), тогда окно нельзя будет закрыть. Ну или на что вашей фантазии хватит.<br/><br/>
Общий :: GUI :: PyQt +сделать окно поверх всех
2018-01-20T10:09:15+02:00Kyrym188840<blockquote><em>poltergeist</em><br/>Это можно вылечить так:<br/><div class="code"><pre> <span class="k">def</span> <span class="nf">closeEvent</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="n">QtGui</span><span class="o">.</span><span class="n">QApplication</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span>
</pre></div></blockquote>Что-то не пойму, эта функция куда ставится? Если на кнопку, то у меня не работает. <br/>А если прописать через self.hide() выход будет правильным? В памяти ничего не останется?<br/><br/><div class="code"><pre> <span class="c1"># Python 3</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="kn">import</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">os</span>
<span class="kn">from</span> <span class="nn">PyQt4</span> <span class="kn">import</span> <span class="n">QtCore</span><span class="p">,</span> <span class="n">QtGui</span><span class="p">,</span> <span class="n">Qt</span>
<span class="kn">from</span> <span class="nn">PyQt4.QtGui</span> <span class="kn">import</span> <span class="p">(</span><span class="n">QWidget</span><span class="p">,</span> <span class="n">qApp</span><span class="p">,</span> <span class="n">QAction</span><span class="p">,</span> <span class="n">QApplication</span><span class="p">,</span> <span class="n">QHBoxLayout</span><span class="p">,</span> <span class="n">QVBoxLayout</span><span class="p">,</span>
<span class="n">QGridLayout</span><span class="p">,</span> <span class="n">QLabel</span><span class="p">,</span> <span class="n">QLineEdit</span><span class="p">,</span> <span class="n">QTextEdit</span><span class="p">,</span> <span class="n">QPushButton</span><span class="p">,</span> <span class="n">QComboBox</span><span class="p">,</span>
<span class="n">QCheckBox</span><span class="p">,</span> <span class="n">QRadioButton</span><span class="p">,</span> <span class="n">QFrame</span><span class="p">,</span> <span class="n">QScrollArea</span><span class="p">,</span> <span class="n">QTabWidget</span><span class="p">,</span> <span class="n">QSizePolicy</span><span class="p">,</span>
<span class="n">QGroupBox</span><span class="p">,</span> <span class="n">QFileDialog</span><span class="p">,</span> <span class="n">QMessageBox</span><span class="p">,</span> <span class="n">QPlainTextEdit</span><span class="p">,</span>
<span class="n">QLCDNumber</span><span class="p">,</span> <span class="n">QSpinBox</span><span class="p">,</span>
<span class="n">QBrush</span><span class="p">,</span> <span class="n">QColor</span><span class="p">)</span>
<span class="kn">from</span> <span class="nn">PyQt4.QtGui</span> <span class="kn">import</span> <span class="n">QIcon</span><span class="p">,</span> <span class="n">QPixmap</span><span class="p">,</span> <span class="n">QPalette</span><span class="p">,</span> <span class="n">QTextCursor</span>
<span class="k">class</span> <span class="nc">Opoveschenie</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">parent</span><span class="o">=</span><span class="bp">None</span><span class="p">):</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">parent</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="mi">100</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span> <span class="c1"># Минимальная ширина и высота окна</span>
<span class="bp">self</span><span class="o">.</span><span class="n">adjustSize</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">'Оповещение'</span><span class="p">)</span> <span class="c1"># Заголовок</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setWindowIcon</span><span class="p">(</span><span class="n">QIcon</span><span class="p">(</span><span class="s1">'res/res_picture/icon.png'</span><span class="p">))</span> <span class="c1"># Иконка</span>
<span class="c1">#self.setWindowFlags(QtCore.Qt.Window.WindowStaysOnTopHint()) # окно на передний план</span>
<span class="bp">self</span><span class="o">.</span><span class="n">setWindowFlags</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">windowFlags</span><span class="p">()</span> <span class="o">|</span> <span class="n">QtCore</span><span class="o">.</span><span class="n">Qt</span><span class="o">.</span><span class="n">WindowStaysOnTopHint</span><span class="p">)</span>
<span class="n">sss_vivod</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"color: #f2f2f0; font: 16pt 'Courier New'"</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="s1">'Заданный<br></span><span class="se">\</span>
<span class="s1"> текст'</span>
<span class="c1"># БЛОК РАЗМЕТКИ</span>
<span class="n">vbox_os</span> <span class="o">=</span> <span class="n">QVBoxLayout</span><span class="p">()</span>
<span class="c1"># ---</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pole_1</span> <span class="o">=</span> <span class="n">QTextEdit</span><span class="p">(</span><span class="s1">'<center>'</span><span class="o">+</span><span class="n">text</span><span class="o">+</span><span class="s1">'</center>'</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pole_1</span><span class="o">.</span><span class="n">setReadOnly</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">pole_1</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="n">sss_vivod</span><span class="p">)</span>
<span class="n">vbox_os</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">pole_1</span><span class="p">)</span>
<span class="c1"># --- ---</span>
<span class="bp">self</span><span class="o">.</span><span class="n">button_ok</span> <span class="o">=</span> <span class="n">QPushButton</span><span class="p">(</span><span class="s1">'Ок'</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">button_ok</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">closeEvent</span><span class="p">)</span>
<span class="n">vbox_os</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_ok</span><span class="p">)</span>
<span class="c1"># --- ---</span>
<span class="n">vbox_os</span><span class="o">.</span><span class="n">addStretch</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="n">vbox_os</span><span class="p">)</span> <span class="c1"># установка рабочей области</span>
<span class="k">def</span> <span class="nf">closeEvent</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">hide</span><span class="p">()</span>
<span class="c1">#QtGui.QApplication.exit()</span>
<span class="c1"># КОНЕЦ</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">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">opoveschenie</span> <span class="o">=</span> <span class="n">Opoveschenie</span><span class="p">()</span>
<span class="n">opoveschenie</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="mi">40</span><span class="p">,</span><span class="mi">500</span><span class="p">)</span>
<span class="n">opoveschenie</span><span class="o">.</span><span class="n">show</span><span class="p">()</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 :: PyQt +сделать окно поверх всех
2009-04-26T10:10:11+03:00Ockonal28153Спасибо! Супер советы! Все это мне надо было.
Общий :: GUI :: PyQt +сделать окно поверх всех
2009-04-26T08:34:18+03:00poltergeist28150setWindowFlags:<br/><blockquote>Note: This function calls setParent() when changing the flags for a window, causing the widget to be hidden. You must call show() to make the widget visible again..</blockquote>В общем надо делать show() после смены флагов окна.<br/><br/>И ещё, надо писать так: self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint), иначе вы другие флаги сбросите. Гляньте у себя в списке процессов, у меня при закрытии окна процесс остаётся в памяти, self.setAttribute(Qt.WA_QuitOnClose, True) как буд-то не сработал (GNU/Debian squeeze). Это можно вылечить так:<br/><div class="code"><pre> def closeEvent(self, event):<br/> QtGui.QApplication.exit()</pre></div>
Общий :: GUI :: PyQt +сделать окно поверх всех
2009-04-25T23:59:07+03:00Ockonal28149Приветствие!<br/>Код создания окна:<br/><blockquote>class Application(QtGui.QMainWindow):<br/> def __init__(self, parent=None):<br/> QtGui.QMainWindow.__init__(self, None, Qt.Tool | Qt.FramelessWindowHint)<br/> self.setFocusPolicy(Qt.StrongFocus)<br/> self.setAttribute(Qt.WA_QuitOnClose, True)</blockquote>И когда мне надо, пытаюсь сделать его поверх всех:<br/><blockquote>self.setWindowFlags(Qt.WindowStaysOnTopHint)</blockquote>Но окно вдруг исчезает! А программа продолжает работать. В чем ошибка?<br/>Спасибо.