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

設(shè)置窗口在屏幕的位置可使用以下函數(shù):
move(int x,int y)
move(QPoint p)
窗口的位置是相對(duì)于父窗口的,已包括標(biāo)題欄的高度和邊框的寬度。
setGeometry(int x,int y,int w,int h)
setGeometry(QRect r)
setGeometry()可同時(shí)設(shè)置窗口的位置和尺寸,與move()不同,x,y的值不包括題欄的高度和邊框的寬度。所以,如果執(zhí)行setGeometry(0,0,500,200),窗口的標(biāo)題欄和邊框在屏幕之外,而無(wú)法顯示在屏幕上。
注意:
原點(diǎn)位置左上角。x 軸向右,y軸向下。
獲取窗口位置的函數(shù)有:
x():獲取窗口的x軸位置;
y():獲取窗口的y軸位置;
pos():返回包含x,y軸位置的QPoint實(shí)例;
geometry():返回包含x,y軸位置以及窗口寬、高的QRect實(shí)例;這些值不包括標(biāo)題欄的高度和邊框的寬度。
frameGeometry():返回的參數(shù)與geometry()相同,但包括標(biāo)題欄的高度和邊框的寬度且要在顯示之后調(diào)用才有效。
例如:

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

要讓窗口顯示在屏幕中央,就需要知道屏幕的尺寸??烧{(diào)用靜態(tài)函數(shù)QApplication.desktop()來(lái)獲取代表桌面的QDesktopWidget 對(duì)象。
再通過(guò)調(diào)用QDesktopWidget類的函數(shù)得到相應(yīng)值:
width():屏幕寬度的像素值;
height()::屏幕高度的像素值;
screenGeomtry():返回整個(gè)屏幕的位置和尺寸的QRect對(duì)象;
availableGeomtry():返回屏幕可用區(qū)域的位置和尺寸的QRect對(duì)象,即扣除任務(wù)欄的區(qū)域。

例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)  #先將窗口放到屏幕外,可避免移動(dòng)窗口時(shí)的閃爍現(xiàn)象。
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_())
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容