QWidget

基础窗口控件QWidget类是所有用户界面对象的基类,所有的窗口和控件都是直接或间接继承自QWidget类。

窗口控件(Widget,简称“控件”)是在PyQt中建立界面的主要元素。在PyQt中把没有嵌入到其他控件中的控件称为窗口,一般窗口都有边框、标题栏。窗口是指程序的整体界面,可以包含标题栏、菜单栏、工具栏、关闭按钮、最小化按钮、最大化按钮等;控件是指按钮、复选框、文本框、表格、进度条等这些组成程序的基本元素。一个程序可以有多个窗口,一个窗口也可以有多个控件。

1. 窗口坐标系统

PyQt使用统一的坐标系统来定位窗口控件的位置和大小。具体的坐标系统如下图所示。

 以屏幕左上角为原点,即(0, 0)点,从左向右为x轴正向,从上向下为y轴正向,整个屏幕的坐标系统就用来定位定位顶层窗口的。

此外,在窗口内部也有自己的坐标系统,该坐标系统仍然以左上角为原点,从左向右为x轴正向,从上向下为y轴正向,原点、x轴、y轴围成的区域叫作Client Area(客户区),在客户区的周围则是标题栏(Window Title)和边框(Frame)。

下图所示是Qt提供的分析QWidget几何结构的一张图。

 从上图可以看出,成员函数分为三类。

QWidget直接提供的成员函数:x()、y()获得窗口左上角的坐标,width()、height()获得客户区的宽度和高度。

QWidget的geometry()提供的成员函数:x()、y()获得客户区左上角的坐标,width()、height()获得客户区的宽度和高度。

QWidget的frameGeometry()提供的成员函数:x()、y()获得客户区左上角的坐标,width()、height()获得包含客户区、标题栏和边框在内的整个窗口的宽度和高度。

2. 常用的几何机构

QWidget不包含边框的常用函数

1)改变客户区的面积

QWidget.resize(width, height)
QWidget.resize(QSize)

2)获得客户区的大小

QWidget.size()

3)获得客户区的宽度和高度

QWidget.width()
QWidget.height()

4)设置客户区的宽度和高度

QWidget.setFixedWidth(int width)

使用这个函数,客户区的高度是固定的,不可以改变,只可以改变宽度。

QWidget.setFixedHeight(int height)

这时候宽度就是固定的,不可以改变,但是可以改变高度

QWidget.setFixedSize(QSize size)
QWidget.setFixedSize(int width, int height)
通过上面这两个函数,高度和宽度都是固定的,不可以通过鼠标来改变窗口的宽度和高度。如果要同时改变客户区的大小和位置,需要用到以下函数。
QWidget.setGeometry(int x, int y, int width, int height)
QWidget.setGeometry(QRect rect)
 

x 和 y 对应的就是 x 和 y 坐标。可以不单独设置x 和 y 坐标。

QWidget包含边框的常用函数

1)获得窗口的大小和位置

QWidget.frameGeometry()

2)设置窗口的位置

QWidget.move(int x, int y)
QWidget.move(QPoint point)

3)获得窗口左上角的坐标

QWidget.pos()

案例4  屏幕坐标系统显示

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton


app = QApplication(sys.argv)
widget = QWidget()
btn = QPushButton(widget)
btn.setText("Button")
btn.move(20, 20)
widget.resize(300, 200)
widget.move(250, 200)

widget.setWindowTitle("PyQt 坐标系统例子")
widget.show()

print("QWidget:")
print("w.x() = %d" % widget.x())
print("w.y() = %d" % widget.y())
print("w.width() = %d" % widget.width())
print("w.height() = %d" % widget.height())

print("QWidget.geometry")
print("w.geometry().x() = %d" % widget.geometry().x())
print("w.geometry().y() = %d" % widget.geometry().y())
print("w.geometry().width() = %d" % widget.geometry().width())
print("w.geometry().height() = %d" % widget.geometry().height())

sys.exit(app.exec_())

3. 创建第一个PyQt5应用

案例5  建立一个主窗口

import sys
from PyQt5.QtWidgets import QApplication, QWidget


app = QApplication(sys.argv)
window = QWidget()
window.resize(300, 200)
window.move(250, 150)
window.setWindowTitle("Hello PyQt5")
window.show()
sys.exit(app.exec_())

4. 为应用设置程序图标

案例6  设置程序图标

import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QWidget, QApplication


# 创建一个名为Icon的窗口类,继承自QWidget类
class Icon(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.initUI()

    # 初始化窗口
    def initUI(self):
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle("程序图标")
        self.setWindowIcon(QIcon("./cartool1.ico"))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    icon = Icon()
    icon.show()
    sys.exit(app.exec_())

5. 显示气泡提示信息

案例7  显示提示信息

import sys
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import QWidget, QApplication, QToolTip


class WinForm(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    # 初始化窗口
    def initUI(self):
        QToolTip.setFont(QFont("SansSerif", 10))
        self.setToolTip("这是一个<b>气泡提示</b>")
        self.setGeometry(200, 300, 400, 400)
        self.setWindowTitle("气泡提示 demo")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = WinForm()
    win.show()
    sys.exit(app.exec_())
 

猜你喜欢

转载自www.cnblogs.com/lynsha/p/13398380.html