PyQt5基本視窗控制元件二(QWidget)
阿新 • • 發佈:2019-01-29
QWidget基本介紹
基礎視窗控制元件QWidget類是所有使用者介面物件的基類,所有的視窗或者控制元件都直接或者間接的繼承自QWidget類。
視窗座標系統
PyQt使用統一的座標系統來定位視窗控制元件的位置和大小,具體如下
以螢幕左上角為原點,也就是(0, 0)點,從左向右為x軸正方向,從上向下為y軸正方向,整個螢幕的座標系統用來定位頂層視窗。
在視窗內部也有自己的座標系統,該座標系統以客戶區的左上角為原點,從左向右為x軸正方向,從上到下為y軸正方向,在客戶區周圍有標題欄和邊框。
從上圖中,可以將這些成員函式分成三類:
- QWidget直接提供的成員函式,x(), y()獲得整個視窗左上角的座標,width()和height()返回客戶區的寬度和高度。
- QWidget的geometry()提供的成員函式,x(),y()返回的是客戶區左上角座標,width(),height()返回客戶區寬度和高度。
- QWidget的frameGeometry()提供的成員函式,x(),y()返回的是整個視窗左上角的座標,-width(),height()也是整個對話方塊的寬度和高度,包括標題欄和邊框。
從上圖可以看出來,QWidget有兩種常見的幾何結構
不包含外面各種邊框的幾何結構(客戶區)。
包含各種邊框的幾何結構。
不包含邊框常用函式
- 改變客戶區面積
QWidget.resize(width, height) - 獲取客戶區大小
QWidget.size() - 獲取客戶區的寬度和高度
QWidget.width()
QWidget.height() - 設定客戶區的寬度和高度(在某些維度上值不可改變)
QWidget.setFixedWidth(int width)
QWidget.setFixedHeight(int height)
QWidget.setFixedSize(int width, int height) - 設定視窗的位置(值可以改變)
QWidget.setGeometry(int x, int y, int width, int height)
包含邊框常用函式
- 獲取視窗的大小和位置
QWidget.frameGeometry() - 設定視窗的位置
QWidget.move(int x, int y) - 獲取視窗左上角座標
QWidget.pos()
座標系統測試
# _*_ coding:utf-8 _*_
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton)
class MyDialog(QWidget):
def __init__(self):
super(MyDialog, self).__init__()
self.init_ui()
def init_ui(self):
# (50, 50)相對螢幕最左上角
# (300, 200)客戶區寬度 高度
self.move(50, 50)
self.resize(300, 200)
self.setWindowTitle('測試視窗座標系統')
self.btn = QPushButton('測試按鈕', self)
# 相對於客戶區的原點
self.btn.move(20, 20)
self.show()
def show_coordinate(self):
print("顯示整個視窗的引數")
print("QWidget.x() = %d" % self.x())
print("QWidget.y() = %d" % self.y())
print("QWidget.pos()" + str(self.pos()))
print("width=%d" % self.frameGeometry().width())
print("height=%d\n" % self.frameGeometry().height())
print("顯示工作區引數")
print("x=%d" % self.geometry().x())
print("y=%d" % self.geometry().y())
print("width=%d" % self.width())
print("height=%d" % self.height())
print("geometry width=%d" % self.geometry().width())
print("geometry height=%d\n" % self.geometry().height())
print("顯示按鈕引數")
print("x=%d" % self.btn.x())
print("y=%d" % self.btn.y())
if __name__ == "__main__":
app = QApplication(sys.argv[1:])
win = MyDialog()
win.show_coordinate()
sys.exit(app.exec_())
顯示整個視窗的引數 QWidget.x() = 50 QWidget.y() = 50
QWidget.pos()PyQt5.QtCore.QPoint(50, 50) width=318 height=245顯示工作區引數 x=59 y=86 width=300 height=200 geometry width=300 geometry
height=200顯示按鈕引數 x=20 y=20