You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:33:09