gpt4 book ai didi

python - 如何获取 `QMainWindow`的屏幕位置并打印出来?

转载 作者:行者123 更新时间:2023-12-02 05:00:30 26 4
gpt4 key购买 nike

我正在尝试获取QMainWindow 的屏幕位置并打印 位置(x,y) 值。我尝试了 self.pos()self.mapToGlobal(self.pos()) ,两者都返回 0

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow


class MainWindow(QMainWindow):

def __init__(self):
QMainWindow.__init__(self)
self.resize(400, 200)

# PRINTS 0 0
print(self.pos().x(), self.pos().y())

# PRINTS 0 0
print(self.mapToGlobal(self.pos()).x(), self.mapToGlobal(self.pos()).y())


app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())

我使用的是 Python 3.7 和 PyQt 5.11,如何实现此目的?

最佳答案

如果有的话,小部件的位置是相对于父级的,如果没有,则相对于屏幕,所以在 MainWindow 的情况下,因为它是一个窗口,应该使用 pos() ,如果它是一个具有父级的小部件,则必须使用 self.mapToGlobal(QtCore.QPoint(0, 0)) 因为它是左上角的位置。

另一方面,每个小部件的初始位置是 QPoint(0, 0),如果它是一个窗口,操作系统会操纵它的位置并移动它,因此您可以获得 (0, 0),因此在您的情况下,您必须跟踪位置的变化,例如使用 moveEvent:

import sys
from PyQt5 import QtCore, QtWidgets

class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.resize(400, 200)

def moveEvent(self, e):
print(self.pos())
super(MainWindow, self).moveEvent(e)

if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())

关于python - 如何获取 `QMainWindow`的屏幕位置并打印出来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53234360/

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