PyQt4 Как держать QWidget всегда на вершине?

1

Я использую PyQt4 с python 2.7 на Windows7

У меня есть QWidget, что я хочу остаться выше QMainWindow, нажав на основной. Идея состоит в том, что основная часть будет содержать ряд кнопок "edit", которые откроют виджет редактирования, в то время как виджет редактирования обновится с информацией, содержащейся в главном. Меня не особенно волнует, если либо "всегда на высоте", пока виджет остается перед основным окном.

Есть несколько вопросов, которые затрагивают эту тему, но я не вижу ответа, который работает для моего конкретного случая использования. Один из них касается виджетов, но дает ответ только для главного окна приложения (виджет остается выше других окон окружающей среды, но отстает от главного окна приложения при нажатии на главный), а другие адреса Qt обычно, но не являются питоновским примером:

PyQt: Всегда сверху

Как сохранить QWidget всегда сверху?

Вот код, который у меня есть до сих пор:

from PyQt4 import QtCore, QtGui

class Ui_MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self, None, QtCore.Qt.WindowStaysOnTopHint)
        self.setWindowTitle("MainWindow")
        self.resize(400, 300)

class Ui_Widget(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self, None, QtCore.Qt.WindowStaysOnTopHint)
        self.setWindowTitle("Widget")
        self.resize(400, 300)

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = Ui_MainWindow()
    MainWindow.show()
    Widget = Ui_Widget()
    Widget.show()
    sys.exit(app.exec_())
Теги:
pyqt4
qt
pyqt
qwidget

1 ответ

1
Лучший ответ

Если вы хотите, чтобы Ui_Widget всегда находился поверх Ui_MainWindow, Ui_Widget должен быть дочерним элементом Ui_MainWindow а флаг Qt::Dialog должен быть активирован, как показано ниже:

from PyQt4 import QtCore, QtGui

class Ui_MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.setWindowTitle("MainWindow")
        self.resize(400, 300)

class Ui_Widget(QtGui.QWidget):
    def __init__(self,  parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.setWindowFlags(self.windowFlags() | QtCore.Qt.Dialog)
        self.setWindowTitle("Widget")
        self.resize(400, 300)
        self.move(200, 150)

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = Ui_MainWindow()
    MainWindow.show()
    Widget = Ui_Widget(MainWindow)
    Widget.show()
    sys.exit(app.exec_())
  • 0
    Круто, спасибо! Я пытался установить отношения «ребенок-родитель» ранее, но не получил нужный результат, поэтому это объясняет, почему. Можете ли вы дать некоторые объяснения, почему необходимо установить флаг Qt :: Dialog, или указать мне, куда мне смотреть?
  • 0
    @tiercen see doc.qt.io/archives/qt-4.8/qt.html#WindowType-enum
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню