krl*_*mlr 4 ubuntu dialog qt4 pyqt pyqt4
我有一个带有大文本框的对话框。我希望用户能够最大化对话框。我已经尝试了以下选项(XML_Editor是一个QDialog实例):
XML_Editor.setWindowFlags(QtCore.Qt.Window or QtCore.Qt.WindowMaximizeButtonHint) -显示最大化按钮,但不再使对话框居中
XML_Editor.setWindowFlags(QtCore.Qt.Dialog or QtCore.Qt.WindowMaximizeButtonHint or QtCore.Qt.CustomizeWindowHint) - 没有效果
现在我的问题是:如何实现显示“最大化”按钮,并且在父级居中居中弹出对话框?网络上的大多数资源似乎都集中在如何摆脱“最大化”按钮上。任何想法如何实现相反?
主要目标是Ubuntu 10.04(默认配置),如果它也可以在Windows和Mac上运行,那就太好了。
我感谢任何提示。提前致谢。
主要平台上的各种窗口管理器的行为都会有所不同,因此很难提出一个在所有情况下都能保证100%正常工作的解决方案。
在Linux KDE上使用默认的 windowFlags会生成一个带有上下文,最大化,最小化和关闭按钮的对话框。但是在Windows XP中,只有一个上下文和关闭按钮。
对于大多数平台,似乎至少需要设置WindowSystemMenuHint和WindowMaximizeButtonHint标志,以确保显示最大化按钮。
为了确保对话框保持在父窗口的中心,只需在对话框的构造函数中将引用传递给父窗口即可。
(请注意,组合标志时,必须使用按位OR运算符|。在示例中,将使用布尔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_())
Run Code Online (Sandbox Code Playgroud)