【问题标题】:PyQt: Dialog's Minimize Window Button is Missing in OSXPyQt:OSX 中缺少对话框的最小化窗口按钮
【发布时间】:2014-03-05 02:20:14
【问题描述】:

使用以下命令创建的对话框:

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 的实例化子类。

【问题讨论】:

    标签: python pyqt qtcore


    【解决方案1】:

    我自己无法测试,但你可以尝试设置这些window flags

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

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

    【讨论】:

    • 这太棒了,用 dialog.setWindowFlags(dialog.windowFlags() | QtCore.Qt.WindowMaximizeButtonHint) 解决了我的问题。实际上我试图省略 dialog.windowFlags() 但是没有标题栏的小部件变得很奇怪,如果你能告诉在这种情况下发生了什么会很好。真的谢谢你!
    【解决方案2】:

    QtGui.QDialog 在任何平台上都不提供最小化按钮,但QtGui.QMainWindow 在每个平台(Windows、Linux 和 OSX)上都提供。您正在创建一个QDialog 对象,同时创建一个GUI 的对象,它是QMainWindow 的子类。如果您写myGui.show(),该窗口将为您提供所有三个按钮(最小化、最大化/恢复和关闭)。但是在dialog.show() 的情况下,您将没有两个(最小化和最大化/恢复)。这是 Qt 的限制。

    【讨论】:

    • 看来 QtGui.QMainWindow 带有一个已经“预建”的布局。我想知道需要使用什么语法将小部件连接到 QtGui.QMainWindow?
    • 不,QMainWindow 不包含布局,它只包含一个 centralWidget (QWidget),您可以将布局添加到 centralWidget self.centralWidget.setLayou(someLayout) 然后将小部件添加到 someLayout,使用 @987654331 @
    • 这完全是错误的。 Qt 确实允许在 Linux 和 Windows 上为 QDialog 设置最小化按钮。对于 Linux,默认情况下所有三个按钮都可用(不过,我只使用 Openbox WM 进行了测试),对于 WinXP,它们可以使用 WindowMinimizeButtonHintWindowMinMaxButtonsHint 标志打开。
    • 谢谢大家!在您的帮助下,我似乎能够弄清楚。请查看对我原帖的修改...
    • 刚刚发现 .reject() 方法没有为 QtGui.QMainWindow 实现(就像它为 MainWindow() 实现的那样)。什么是拒绝()最接近的替代品(我主要将其链接到取消按钮操作)..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2011-09-25
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多