Я использую PyQt4 с python 2.7 на Windows7
У меня есть QWidget, что я хочу остаться выше QMainWindow, нажав на основной. Идея состоит в том, что основная часть будет содержать ряд кнопок "edit", которые откроют виджет редактирования, в то время как виджет редактирования обновится с информацией, содержащейся в главном. Меня не особенно волнует, если либо "всегда на высоте", пока виджет остается перед основным окном.
Есть несколько вопросов, которые затрагивают эту тему, но я не вижу ответа, который работает для моего конкретного случая использования. Один из них касается виджетов, но дает ответ только для главного окна приложения (виджет остается выше других окон окружающей среды, но отстает от главного окна приложения при нажатии на главный), а другие адреса Qt обычно, но не являются питоновским примером:
Как сохранить 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_())
Если вы хотите, чтобы 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_())