Форум сайта python.su
Приветствие!
Код создания окна:
class Application(QtGui.QMainWindow):И когда мне надо, пытаюсь сделать его поверх всех:
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, None, Qt.Tool | Qt.FramelessWindowHint)
self.setFocusPolicy(Qt.StrongFocus)
self.setAttribute(Qt.WA_QuitOnClose, True)
self.setWindowFlags(Qt.WindowStaysOnTopHint)Но окно вдруг исчезает! А программа продолжает работать. В чем ошибка?
Офлайн
setWindowFlags:
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..В общем надо делать show() после смены флагов окна.
def closeEvent(self, event):
QtGui.QApplication.exit()
Отредактировано (Апрель 26, 2009 08:36:15)
Офлайн
Спасибо! Супер советы! Все это мне надо было.
Офлайн
poltergeistЧто-то не пойму, эта функция куда ставится? Если на кнопку, то у меня не работает.
Это можно вылечить так:def closeEvent(self, event): QtGui.QApplication.exit()
# Python 3 # -*- coding: utf-8 -*- import sys, os from PyQt4 import QtCore, QtGui, Qt from PyQt4.QtGui import (QWidget, qApp, QAction, QApplication, QHBoxLayout, QVBoxLayout, QGridLayout, QLabel, QLineEdit, QTextEdit, QPushButton, QComboBox, QCheckBox, QRadioButton, QFrame, QScrollArea, QTabWidget, QSizePolicy, QGroupBox, QFileDialog, QMessageBox, QPlainTextEdit, QLCDNumber, QSpinBox, QBrush, QColor) from PyQt4.QtGui import QIcon, QPixmap, QPalette, QTextCursor class Opoveschenie(QWidget): def __init__(self, parent=None): QWidget.__init__(self, parent) self.setMinimumSize(100, 100) # Минимальная ширина и высота окна self.adjustSize() self.setWindowTitle('Оповещение') # Заголовок self.setWindowIcon(QIcon('res/res_picture/icon.png')) # Иконка #self.setWindowFlags(QtCore.Qt.Window.WindowStaysOnTopHint()) # окно на передний план self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint) sss_vivod = ("color: #f2f2f0; font: 16pt 'Courier New'") text = 'Заданный<br>\ текст' # БЛОК РАЗМЕТКИ vbox_os = QVBoxLayout() # --- self.pole_1 = QTextEdit('<center>'+text+'</center>') self.pole_1.setReadOnly(1) self.pole_1.setStyleSheet(sss_vivod) vbox_os.addWidget(self.pole_1) # --- --- self.button_ok = QPushButton('Ок') self.button_ok.clicked.connect(self.closeEvent) vbox_os.addWidget(self.button_ok) # --- --- vbox_os.addStretch() self.setLayout(vbox_os) # установка рабочей области def closeEvent(self, event): self.hide() #QtGui.QApplication.exit() # КОНЕЦ if __name__ == "__main__": app = QApplication(sys.argv) opoveschenie = Opoveschenie() opoveschenie.move(40,500) opoveschenie.show() sys.exit(app.exec_())
Отредактировано Kyrym (Янв. 20, 2018 10:10:45)
Офлайн
Kyrymесли поставить self.hide() выхода вообще не будет, оно скроет ваше окно но обработчик событый будет по прежнему работать.
А если прописать через self.hide() выход будет правильным?
KyrymХЗ вроде работает и на кнопку и так..
Если на кнопку, то у меня не работает.
KyrymНикуда не ставится, это переопределенная функуия, вызываеться автоматически при закрытии окна. Вы можете изменить ее поведения, например вписа туда далоговое окно, типа “документ не сохранен, сохранить да/нет”. Или написать event.ignore(), тогда окно нельзя будет закрыть. Ну или на что вашей фантазии хватит.
Что-то не пойму, эта функция куда ставится?
[code python][/code]
Офлайн
Всем доброго времени суток! Помогите с этим же вопросом. Я не давно начал изучать питон. Хочу сделать, что бы по нажатию на кнопку Test, форма становилась поверх всего(включая панель задач)… Прочитав все что было выше, мне это не помогло. Причем, если добавить
self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint)
import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QMainWindow, QLabel, QDesktopWidget, \ QProgressBar, QHBoxLayout, QMessageBox from PyQt5.QtGui import QIcon, QBitmap, QColor, QFont, QPixmap from PyQt5.QtCore import QBasicTimer from PyQt5 import QtCore class Main(QMainWindow): def __init__(self): super().__init__() self.setMinimumSize(640, 480) self.setWindowTitle('Окно родитель всех форм') self.move(500, 200) self.center() self.Creat_label() self.exit() self.test() def center(self): qr = self.frameGeometry() cp = QDesktopWidget().availableGeometry().center() qr.moveCenter(cp) self.move(qr.topLeft()) self.resize(QDesktopWidget().availableGeometry().width(), QDesktopWidget().availableGeometry().height()) def Creat_label(self): label = QLabel('Text', self) label.setText(str(QDesktopWidget().availableGeometry())) label.resize(label.sizeHint()) def exit(self): button = QPushButton('Exit', self) button.clicked.connect(self.close) button.move(50, 50) def test(self): button = QPushButton('Test', self) button.clicked.connect(self.test_func) button.move(150, 50) def test_func(self): self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint) self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Main() ex.show() app.exec_()
Офлайн