移动屏幕外的窗口返回屏幕

平时工作中笔记本外接显示器分屏,很多工作窗口放在分屏的显示器上。结果有一天携带笔记本外出办公时傻眼了,打开的程序都不在屏幕上显示。这时就需要将屏幕外的窗口移回屏幕中,有两个方法:

方法一:

1.保持要移动的窗口为激活状态,按 Alt+空格 激活窗口菜单(因为窗口在屏幕外,所以看不到,没关系)

2.按一下 m 键,然后按方向键左或右就可以移动窗口了(分屏貌似在右侧,所以按 左方向 键就可以移动窗口回屏幕了)

方法二(Win10系统):

1.随意打开一个能在屏幕上显示的窗口,按 win + 左方向键,此时会弹出选择右侧窗口。选择要显示的窗口,就可以在屏幕上显示需要的窗口了

win 键就是键盘左下的这个键 


<think>我们有一个需求:将PyQt5应用程序窗口移动屏幕中心。 根据引用[2]中的示例代码(该示例是用PyQt5编写的),我们可以使用以下方法: 1. 获取窗口的矩形(frameGeometry) 2. 获取屏幕的中心点(availableGeometry().center()) 3. 将窗口矩形的中心移动屏幕中心点 4. 将窗口移动到该矩形的左上角位置 具体步骤: - 使用`self.frameGeometry()`获取窗口的矩形(包括窗口边框) - 使用`QDesktopWidget().availableGeometry().center()`获取屏幕中心点 - 将窗口矩形的中心移动屏幕中心点 - 然后通过`self.move(qr.topLeft())`将窗口移动到新的位置 注意:在PyQt5中,我们使用`QDesktopWidget`来获取屏幕信息,但注意在PyQt5中,`QDesktopWidget`已经被标记为过时(deprecated), 推荐使用`QScreen`。不过,引用[2]中的方法仍然有效,且简单易用。 但是,根据PyQt5的更新,我们可以使用更现代的方法(使用`QScreen`)来实现,但为了简单和兼容性,我们先展示引用[2]中的方法。 以下是实现窗口居中的代码片段(基于引用[2]): ```python def center(self): # 获取窗口的矩形 qr = self.frameGeometry() # 获取屏幕的中心点(注意:QDesktopWidget可能被废弃,但在PyQt5中仍可用) cp = QDesktopWidget().availableGeometry().center() # 将窗口矩形的中心点移动屏幕中心点 qr.moveCenter(cp) # 将窗口移动窗口矩形的左上角位置 self.move(qr.topLeft()) ``` 然而,在PyQt5.14及以上版本,推荐使用以下方式: ```python def center(self): # 获取当前窗口屏幕(如果窗口已经显示,可以使用self.screen();但窗口可能尚未显示,所以使用主屏幕) screen = QApplication.primaryScreen() # 或者使用 QApplication.screens()[0] 如果有多个屏幕 # 获取屏幕的可用几何区域(不包括任务栏等) available_geometry = screen.availableGeometry() screen_center = available_geometry.center() # 计算窗口左上角的位置 qr = self.frameGeometry() qr.moveCenter(screen_center) self.move(qr.topLeft()) ``` 但是,为了兼容性,我们使用引用[2]中的方法(使用QDesktopWidget)也是可以的。 另,注意在初始化窗口后调用此方法,例如在`initUI`方法中。 完整示例代码(基于引用[2]并更新为PyQt5): ```python import sys from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication from PyQt5.QtCore import Qt class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.resize(250, 150) self.center() # 调用居中方法 self.setWindowTitle('Center') self.show() def center(self): qr = self.frameGeometry() # 获取主屏幕的中心点 cp = QDesktopWidget().availableGeometry().center() qr.moveCenter(cp) self.move(qr.topLeft()) if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) ``` 注意:在调用`center()`方法时,窗口应该已经设置了大小(即调用了`resize`或设置了固定大小),因为我们需要窗口的尺寸来计算位置。 如果窗口还没有显示(即没有调用`show()`),那么使用`QDesktopWidget`也是安全的。 此,如果是在多显示器环境下,上述代码会将窗口居中在主屏幕上。如果想要居中在当前的屏幕上(如果窗口已经显示在某个屏幕上),可以使用: ```python def center(self): # 获取窗口所在的屏幕(如果窗口还没有显示,则返回None,所以这里用主屏幕) screen = QApplication.screenAt(self.pos()) if screen is None: screen = QApplication.primaryScreen() # 获取屏幕的可用区域 available_geometry = screen.availableGeometry() screen_center = available_geometry.center() qr = self.frameGeometry() qr.moveCenter(screen_center) self.move(qr.topLeft()) ``` 但是,在窗口显示之前,`self.pos()`可能返回的是(0,0),所以可能无法正确获取屏幕。因此,在窗口显示之前,我们使用主屏幕更安全。 总结:对于大多数情况,使用引用[2]中的方法(使用QDesktopWidget)简单且有效。 相关问题: 1. 如何将PyQt5窗口居中在指定的屏幕上(多显示器环境)? 2. PyQt5中如何获取屏幕信息(如分辨率、可用区域)? 3. 在PyQt5中如何设置窗口的初始大小和位置? 4. PyQt5的QDesktopWidget为什么被废弃?有什么替代方案?</think>要将 PyQt5 应用程序窗口移动屏幕中心,可以使用以下方法: ### 推荐方法(使用 `QScreen` API) ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtCore import QRect class MainWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('居中窗口示例') self.resize(800, 600) self.center() self.show() def center(self): """将窗口移动屏幕中心""" # 获取主屏幕的几何信息 screen = QApplication.primaryScreen() screen_geometry = screen.availableGeometry() # 计算窗口应居中的位置 window_rect = self.frameGeometry() x = (screen_geometry.width() - window_rect.width()) // 2 y = (screen_geometry.height() - window_rect.height()) // 2 # 移动窗口到计算位置 self.move(x, y) if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() sys.exit(app.exec_()) ``` ### 传统方法(使用 `QDesktopWidget`) ```python def center(self): """将窗口移动屏幕中心(传统方法)""" # 获取屏幕尺寸和窗口尺寸 screen = QDesktopWidget().screenGeometry() window = self.geometry() # 计算居中位置 x = (screen.width() - window.width()) // 2 y = (screen.height() - window.height()) // 2 # 移动窗口 self.move(x, y) ``` ### 关键步骤说明: 1. **获取屏幕信息**: - 使用 `QApplication.primaryScreen().availableGeometry()` 获取主屏幕可用区域 - 或者使用 `QDesktopWidget().screenGeometry()`(较旧方法) 2. **计算居中位置**: - 水平位置:`(屏幕宽度 - 窗口宽度) / 2` - 垂直位置:`(屏幕高度 - 窗口高度) / 2` 3. **移动窗口**: - 使用 `self.move(x, y)` 将窗口移动到计算位置 ### 注意事项: 1. 在调用 `center()` 方法前,必须设置好窗口大小(通过 `resize()` 或 `setFixedSize()`) 2. 多显示器环境下,使用 `primaryScreen()` 会定位到主显示器 3. 考虑窗口边框:`frameGeometry()` 包含窗口边框,`geometry()` 不包含 4. 对于多显示器支持: ```python # 获取特定显示器的几何信息 screen = QApplication.screens()[1] # 第二个显示器 ``` ### 完整工作流程: 1. 创建应用程序实例 2. 初始化主窗口 3. 设置窗口大小和标题 4. 调用居中方法 5. 显示窗口并启动事件循环 这种方法确保窗口在不同分辨率和DPI设置下都能正确居中,是PyQt5开发中的标准做法[^2]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值