PyQt6获取窗口几何信息时坐标始终为0的问题
PyQt6获取窗口几何信息时坐标始终为0的问题
嗨,我之前在Ubuntu上用PyQt6的时候也碰到过一模一样的问题!其实这是因为你用错了获取窗口位置的方法啦。
在Ubuntu基于的X11窗口系统(或者部分Wayland环境)中,geometry()方法返回的是窗口的客户区几何信息——也就是窗口内部去掉标题栏、边框之后的区域,这个区域的坐标是相对于窗口自身左上角的,所以x和y自然始终是0。
如果你想获取窗口在屏幕上的实际位置和完整尺寸(包含标题栏、边框),应该改用frameGeometry()方法。把你代码里的print(self.geometry())改成下面这样:
print(self.frameGeometry())
修改后的完整代码示例:
import sys from PyQt6.QtWidgets import QApplication, QVBoxLayout, QPushButton, QWidget from PyQt6.QtCore import QTimer class MainWindow(QWidget): def __init__(self): super().__init__() self.resize(200, 300) self.setWindowTitle("Main Window") layout = QVBoxLayout() btn = QPushButton("Click", self) btn.clicked.connect(self.print_geometry) layout.addWidget(btn) self.setLayout(layout) self.show() def print_geometry(self): print(self.frameGeometry()) # 现在会输出窗口在屏幕上的实际位置和完整尺寸 if __name__ == '__main__': app = QApplication(sys.argv) win = MainWindow() sys.exit(app.exec())
现在你移动窗口后点击按钮,应该就能得到包含正确x、y坐标的QRect了,比如类似这样的输出:
PyQt6.QtCore.QRect(100, 150, 200, 300)
另外补充一点:如果你的Ubuntu用的是Wayland桌面环境,可能还会有一些特殊的权限限制,但大部分情况下用frameGeometry()都能解决这个问题。
备注:内容来源于stack exchange,提问作者Rakesh B Sirvi
相关产品推荐
相关产品推荐

