的各種窗口管理器將所有的行爲有所不同,所以這將是很難想出一個100%保證在所有情況下都能正常工作的解決方案。
在Linux上使用默認windowFlags KDE會產生一個帶有上下文,最大化,最小化和關閉按鈕的對話框;但在Windows XP中,只有上下文和關閉按鈕。
對於大多數平臺而言,至少需要設置WindowSystemMenuHint
和WindowMaximizeButtonHint
標誌以確保存在最大化按鈕。
爲確保對話框始終居於父窗口的中心,只需在對話框的構造函數中傳遞對父對象的引用即可。
(請注意,組合標誌時,必須使用位或操作|
。在你的例子,你用布爾OR操作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_())
非常相似http://stackoverflow.com/questions/4699808/cant-add-minimize -button-to-qdialog-linux。沒有真正的解決方案:-( – krlmlr