centralWidget大小似乎错了?

时间:2015-11-02 22:40:03

标签: python qt5 pyqt5

我试图想办法让一个简单的QMainWindow显示一个空的QWidget并报告用于命令行的实际屏幕大小。什么有效(修改后的ZetCode PyQt5教程):

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction, QApplication, QWidget, QSizePolicy, QVBoxLayout
from PyQt5.QtCore import QPoint
from PyQt5.QtGui import QIcon


class Example(QMainWindow):

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

        self.initUI()


    def initUI(self):               

        self.setCentralWidget(QWidget(self))

        exitAction = QAction(QIcon('exit24.png'), 'Exit', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit application')
        exitAction.triggered.connect(self.close)

        self.statusBar()

        #menubar = self.menuBar()
        #fileMenu = menubar.addMenu('&File')
        #fileMenu.addAction(exitAction)

        #toolbar = self.addToolBar('Exit')
        #toolbar.addAction(exitAction)

        self.setGeometry(700, 100, 300, 700)
        self.setWindowTitle('Main window')    
        self.show()

        #TL -> topLeft
        TL = QPoint(self.centralWidget().geometry().x(), self.centralWidget().geometry().y())
        print("TL_Relative",TL)
        print("TL_Absolute:",self.mapToGlobal(TL))

        #BR -> bottomRight
        BR = QPoint(self.centralWidget().geometry().width(), self.centralWidget().geometry().height())
        print("BR_Relative",BR)
        print("BR_Absolute:",self.mapToGlobal(BR))


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

结果是:

TL_Relative PyQt5.QtCore.QPoint()
TL_Absolute: PyQt5.QtCore.QPoint(700, 100)
BR_Relative PyQt5.QtCore.QPoint(300, 678)
BR_Absolute: PyQt5.QtCore.QPoint(1000, 778)

但是,当我取消注释所有注释掉的initUI条目时,我得到:

TL_Relative PyQt5.QtCore.QPoint(0, 65)
TL_Absolute: PyQt5.QtCore.QPoint(700, 165)
BR_Relative PyQt5.QtCore.QPoint(300, 613)
BR_Absolute: PyQt5.QtCore.QPoint(1000, 713)

最高价值还可以,但BR_Relative对我没有意义。在屏幕顶部添加内容会从底部移除高度?

我还尝试了很多其他方法。 geometry()rect()及其topLeft()bottomRight() ...它们都显示(几乎)相同的结果。

我哪里错了?

如果它很重要:我正在使用Python 3.4 / PyQT5运行Raspbian驱动的RPi2。这个脚本的原因是有一个框架可以容纳OMXplayer"内部"在启动OMXplayer时将获取的坐标移交给--win - 参数。启动后,OMXplayer应该覆盖空的centralWidget。但是只要我添加菜单或工具栏,OMXplayer窗口就不再合适了。只有statusBar可以使用。

1 个答案:

答案 0 :(得分:1)

一张图片胜过千言万语。来自QMainWindow文档:

Qt Main Window Framework

因此,由于窗口几何图形保持不变,菜单栏和工具栏必须占用远离中央窗口小部件的空间。中央窗口小部件的原始高度为678;减去65,即可获得613

要获得正确的值,请尝试:

    geometry = self.centralWidget().geometry()
    print("TL_Relative", geometry.topLeft())
    print("TL_Absolute:", self.mapToGlobal(geometry.topLeft()))

    print("BR_Relative", geometry.bottomRight())
    print("BR_Absolute:", self.mapToGlobal(geometry.bottomRight()))