Различные оконные менеджеры на основных платформах будут вести себя по-разному, поэтому будет сложно найти решение, которое гарантированно будет работать на 100% во всех случаях.
Использование по умолчанию windowFlags в Linux KDE создает диалог с кнопками контекста, максимизации, свертывания и закрытия;но в Windows XP есть только контекст и кнопка закрытия.
Для большинства платформ может показаться, что для установки кнопки максимизации необходимо установить хотя бы флаги WindowSystemMenuHint
и WindowMaximizeButtonHint
.присутствует.
Чтобы убедиться, что диалог остается в центре родительского окна, просто передайте ссылку на родителя в конструкторе диалога.
(Обратите внимание, что при объединении флагов необходимо использовать побитовое ИЛИ оператор |
. В ваших примерах вы используете логический оператор ИЛИ or
, который будет выбирать первое ненулевое значение, но игнорировать остальные).
В следующем примере показано центрированное диалоговое окно с кнопкой максимизации для меня как в Linux KDE, так и в Windows XP:
from PyQt4 import QtGui, QtCore
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.button = QtGui.QPushButton('Show Dialog', self)
self.button.clicked.connect(self.handleButton)
layout = QtGui.QHBoxLayout(self)
layout.addWidget(self.button)
def handleButton(self):
dialog = QtGui.QDialog(self)
dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose)
dialog.setWindowFlags(dialog.windowFlags() |
QtCore.Qt.WindowSystemMenuHint |
QtCore.Qt.WindowMinMaxButtonsHint)
dialog.resize(160, 120)
dialog.show()
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
window.resize(320, 240)
sys.exit(app.exec_())