gpt4 book ai didi

python - centralWidget 大小似乎错误?

转载 作者:太空宇宙 更新时间:2023-11-03 17:17:45 24 4
gpt4 key购买 nike

我正在尝试找出一种方法来获取一个简单的 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 窗口就不再适合了。只有状态栏有效。

最佳答案

一图胜千言。来自 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()))

关于python - centralWidget 大小似乎错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33488351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com