如何获取`QMainWindow`的屏幕位置并打印出来?
How to get the screen position of `QMainWindow` and print it?
我正在尝试获取 QMainWindow
的屏幕位置和 print
的位置 (x,y) 值。 self.pos()
和 self.mapToGlobal(self.pos())
我都试过了 return 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
的情况下,因为它是一个window, pos()
应该使用,如果它是一个有父级的小部件,你必须使用 self.mapToGlobal(QtCore.QPoint(0, 0))
因为它是左上角的位置。
另一方面,每个小部件的初始位置都是 QPoint(0, 0)
,如果它是 window,则 OS 会操纵它的位置并移动它,所以你得到了值(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_())
我将添加 link http://doc.qt.io/qt-5/application-windows.html#window-geometry 和一个示例:
import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget,
QVBoxLayout, QTextEdit, QPushButton)
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.resize(400, 200)
centralWidget = QWidget()
self.setCentralWidget(centralWidget)
self.textEdit = QTextEdit()
self.btn = QPushButton("get the screen position of `QMainWindow`")
self.btn.clicked.connect(self.btnClicked)
layoutV = QVBoxLayout(centralWidget)
layoutV.addWidget(self.textEdit)
layoutV.addWidget(self.btn)
self.textEdit.append("Start:")
self.textEdit.append("pos.x=`{}`, pos.y=`{}`"
"".format(self.pos().x(), self.pos().y()))
self.textEdit.append("geometry.x=`{}`, geometry.y=`{}`"
"".format(self.geometry().x(), self.geometry().y()))
self.textEdit.append("--------------------------------------")
def btnClicked(self):
self.textEdit.append("pos.x=`{}`, pos.y=`{}`"
"".format(self.pos().x(), self.pos().y()))
self.textEdit.append("geometry.x=`{}`, geometry.y=`{}`"
"".format(self.geometry().x(), self.geometry().y()))
def moveEvent(self, event): # QMoveEvent
print("x=`{}`, y=`{}`".format(event.pos().x(), event.pos().y()))
super(MainWindow, self).moveEvent(event)
def resizeEvent(self, event): # QResizeEvent
print("w=`{}`, h=`{}`".format(event.size().width(), event.size().height()))
super(MainWindow, self).resizeEvent(event)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
我正在尝试获取 QMainWindow
的屏幕位置和 print
的位置 (x,y) 值。 self.pos()
和 self.mapToGlobal(self.pos())
我都试过了 return 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
的情况下,因为它是一个window, pos()
应该使用,如果它是一个有父级的小部件,你必须使用 self.mapToGlobal(QtCore.QPoint(0, 0))
因为它是左上角的位置。
另一方面,每个小部件的初始位置都是 QPoint(0, 0)
,如果它是 window,则 OS 会操纵它的位置并移动它,所以你得到了值(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_())
我将添加 link http://doc.qt.io/qt-5/application-windows.html#window-geometry 和一个示例:
import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget,
QVBoxLayout, QTextEdit, QPushButton)
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.resize(400, 200)
centralWidget = QWidget()
self.setCentralWidget(centralWidget)
self.textEdit = QTextEdit()
self.btn = QPushButton("get the screen position of `QMainWindow`")
self.btn.clicked.connect(self.btnClicked)
layoutV = QVBoxLayout(centralWidget)
layoutV.addWidget(self.textEdit)
layoutV.addWidget(self.btn)
self.textEdit.append("Start:")
self.textEdit.append("pos.x=`{}`, pos.y=`{}`"
"".format(self.pos().x(), self.pos().y()))
self.textEdit.append("geometry.x=`{}`, geometry.y=`{}`"
"".format(self.geometry().x(), self.geometry().y()))
self.textEdit.append("--------------------------------------")
def btnClicked(self):
self.textEdit.append("pos.x=`{}`, pos.y=`{}`"
"".format(self.pos().x(), self.pos().y()))
self.textEdit.append("geometry.x=`{}`, geometry.y=`{}`"
"".format(self.geometry().x(), self.geometry().y()))
def moveEvent(self, event): # QMoveEvent
print("x=`{}`, y=`{}`".format(event.pos().x(), event.pos().y()))
super(MainWindow, self).moveEvent(event)
def resizeEvent(self, event): # QResizeEvent
print("w=`{}`, h=`{}`".format(event.size().width(), event.size().height()))
super(MainWindow, self).resizeEvent(event)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())