加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

PyQt5编程(9):窗口在屏幕的位置与管理

(2017-07-06 22:13:43)
标签:

杂谈

分类: PYTHON
设置窗口在屏幕的位置可使用以下函数:
move(int x,int y)
move(QPoint p)
窗口的位置是相对于父窗口的,已包括标题栏的高度和边框的宽度。
setGeometry(int x,int y,int w,int h)
setGeometry(QRect r)
setGeometry()可同时设置窗口的位置和尺寸,与move()不同,x,y的值不包括题栏的高度和边框的宽度。所以,如果执行setGeometry(0,0,500,200),窗口的标题栏和边框在屏幕之外,而无法显示在屏幕上。
注意:
       原点位置左上角。x 轴向右,y轴向下。
       获取窗口位置的函数有:
x():获取窗口的x轴位置;
y():获取窗口的y轴位置;
pos():返回包含x,y轴位置的QPoint实例;
geometry():返回包含x,y轴位置以及窗口宽、高的QRect实例;这些值不包括标题栏的高度和边框的宽度。
frameGeometry():返回的参数与geometry()相同,但包括标题栏的高度和边框的宽度且要在显示之后调用才有效。
例如:

window.resize(300, 100)

window.move(10, 10)

rect = window.geometry()

print(rect.left(), rect.top())            # 14 40

print(rect.width(), rect.height())        # 300 100

rect = window.frameGeometry()

print(rect.left(), rect.top())            # 10 10

print(rect.width(), rect.height())        # 308 134

要让窗口显示在屏幕中央,就需要知道屏幕的尺寸。可调用静态函数QApplication.desktop()来获取代表桌面的QDesktopWidget 对象。再通过调用QDesktopWidget类的函数得到相应值:
width():屏幕宽度的像素值;
height():
:屏幕高度的像素值;
screenGeomtry():返回整个屏幕的位置和尺寸的QRect对象;
availableGeomtry():
返回屏幕可用区域的位置和尺寸的QRect对象,即扣除任务栏的区域。

例1:
# -*- coding: utf-8 -*-

from PyQt5 import QtWidgets

import sys

 app = QtWidgets.QApplication(sys.argv)

window = QtWidgets.QWidget()

window.setWindowTitle("在屏幕中央显示窗口")

window.resize(300, 100)

desktop = QtWidgets.QApplication.desktop()

x = (desktop.width() - window.width()) // 2

y = (desktop.height() - window.height()) // 2

window.move(x, y)

window.show()

 

sys.exit(app.exec_())

例2:
# -*- coding: utf-8 -*-

from PyQt5 import QtWidgets

import sys

 app = QtWidgets.QApplication(sys.argv)

window = QtWidgets.QWidget()

window.setWindowTitle("在屏幕中央显示窗口")

window.resize(300, 100)

window.move(window.width() * -2, 0)  #先将窗口放到屏幕外,可避免移动窗口时的闪烁现象。

window.show()

desktop = QtWidgets.QApplication.desktop()

x = (desktop.width() - window.frameSize().width()) // 2

y = (desktop.height() - window.frameSize().height()) // 2

window.move(x, y)

 

sys.exit(app.exec_())


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有