PyQt:OSX中对话框的最小化按钮缺失

5 投票
2 回答
5064 浏览
提问于 2025-04-17 20:52

用下面的代码创建的对话框:

class GUI(QtGui.QMainWindow):
    def __init__(self):
        super(GUI, self).__init__()

global dialog
dialog = QtGui.QDialog()
myGui = GUI()

在OSX系统上缺少最小化窗口的按钮,而在Windows上是有的。我需要设置什么标志才能显示这个缺失的按钮吗?请给点建议,谢谢!

后续编辑:

我没有尝试用QtGui.QDialog()来解决没有最小化按钮的问题。不过,我大致知道如何用QtGui.QMainWindow来获得那个缺失的按钮。下面是一个简单的代码,展示了基本的语法:

from PyQt4 import QtCore, QtGui

app = QtGui.QApplication(sys.argv)

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        myQWidget = QtGui.QWidget()
        myBoxLayout = QtGui.QVBoxLayout()       

        myLineEdit = QtGui.QLineEdit("myLineEdit")
        myBoxLayout.addWidget(myLineEdit)

        myQWidget.setLayout(myBoxLayout)

        self.setCentralWidget(myQWidget)


window = MainWindow()
window.show()
window.resize(480,320)
sys.exit(app.exec_())

QtGui.QMainWindow的一个关键概念是,首先我们要声明一个QWidget():

myQWidget = QtGui.QWidget() 

然后我们给它分配一个“主”布局:

myQWidget.setLayout(myBoxLayout)

最后一步是别忘了用下面的代码把这个QWidget()分配给对话框本身:

self.setCentralWidget(myQWidget)

这里的'self'是QtGui.QMainWindow的一个实例化子类。

2 个回答

11

我自己没法测试这个,不过你可以试试设置这些窗口标志

    dialog.setWindowFlags(dialog.windowFlags() |
        QtCore.Qt.WindowMinimizeButtonHint |
        QtCore.Qt.WindowSystemMenuHint)

WindowSystemMenuHint这个标志可能不是必需的)。

1

QtGui.QDialog 在任何平台上都没有最小化按钮,但 QtGui.QMainWindow 在每个平台上(Windows、Linux 和 OSX)都有这个按钮。你创建了一个 QDialog 对象,同时也创建了一个 GUI 对象,这个对象是 QMainWindow 的子类。如果你写 myGui.show(),这个窗口会给你提供三个按钮(最小化、最大化/还原和关闭)。但是如果你使用 dialog.show(),你就不会看到最小化和最大化/还原这两个按钮。这是 Qt 的一个限制。

撰写回答