【问题标题】:How to make a window that occupies the full screen without maximising?如何让一个窗口在不最大化的情况下占据全屏?
【发布时间】:2013-03-20 02:36:45
【问题描述】:

我正在使用 Qt 在 python 中编写代码

我想创建应用程序窗口(带有装饰)以占据全屏大小。目前这是我的代码:

avGeom = QtGui.QDesktopWidget().availableGeometry()
self.setGeometry(avGeom)

问题是它忽略了窗口装饰,所以框架更大......我用谷歌搜索了,发现这个:

http://harmattan-dev.nokia.com/docs/library/html/qt4/application-windows.html#window-geometry

这似乎表明我需要将 frameGeometry 设置为 avGeom 但是我还没有找到方法来做到这一点。此外,在上面链接中的 cmets 中,它说我所追求的可能甚至不可能,因为程序无法在运行之前设置 frameGeometry ...如果是这种情况,我只想确认我的问题无法解决.

编辑:

所以我稍微玩了一下代码,这给出了我想要的...但是数字 24 基本上是通过反复试验直到窗口标题可见...我想要一些更好的方法来做到这一点。 ..独立于窗口管理器..

avGeom = QtGui.QDesktopWidget().availableGeometry()
avGeom.setTop(24)
self.setGeometry(avGeom)

现在我可以做我想做的事,但纯粹是出于反复试验

运行 Ubuntu,使用 Spyder 作为 IDE

谢谢

【问题讨论】:

标签: python qt pyqt pyside


【解决方案1】:

窗口大小使用QtGui.QApplication().desktop().availableGeometry()

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from PyQt4 import QtGui, QtCore

class MyWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)

        self.pushButtonClose = QtGui.QPushButton(self)
        self.pushButtonClose.setText("Close")
        self.pushButtonClose.clicked.connect(self.on_pushButtonClose_clicked)

        self.layoutVertical = QtGui.QVBoxLayout(self)
        self.layoutVertical.addWidget(self.pushButtonClose)

        titleBarHeight = self.style().pixelMetric(
            QtGui.QStyle.PM_TitleBarHeight,
            QtGui.QStyleOptionTitleBar(),
            self
        )

        geometry = app.desktop().availableGeometry()
        geometry.setHeight(geometry.height() - (titleBarHeight*2))

        self.setGeometry(geometry)

    @QtCore.pyqtSlot()
    def on_pushButtonClose_clicked(self):
        QtGui.QApplication.instance().quit()

if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('MyWindow')

    main = MyWindow()
    main.show()

    sys.exit(app.exec_())

【讨论】:

  • 不,这不起作用......现在发生的事情是小部件是整个屏幕的大小,而不是整个屏幕减去菜单栏(开始类型按钮始终打开屏幕)...理想情况下,我希望所有内容都减去菜单栏减去标题所需的空间(又名装饰)
  • @evan54 查看我的updated answer,我对其进行了修改以隐藏标题栏(注意使用availbleGeometry 而不是screenGeometry)。
  • eee 仍然不是我想要的......我真的不想隐藏标题栏我只想要我设置的几何图形,因为有一个标题栏......对不起,如果我让你困惑
  • @evan54 我的回答没有setWindowFlags 部分能解决您的问题吗?
  • 不...我得到的问题是它会使小部件大小正确,但是,窗口=小部件+标题大于屏幕...如果您查看链接我已经发布了 我想你会明白我的意思
【解决方案2】:

我一直发现从 QMainWindow 类继承特别有用。像这样:

import sys
from PySide.QtGui import *
from PySide.QtCore import *


class Some_APP(QMainWindow):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        ### this line here is what you'd be looking for
        self.setWindowState(Qt.WindowMaximized)
        ###
        self.show()


def main():
    app = QApplication(sys.argv)
    some_app = Some_APP()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    相关资源
    最近更新 更多