• 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_())
     
  • 相关阅读:
    不同浏览器对于textarea中换行符的处理
    apache 页面压缩技术mod_deflate安装和配置
    php5+Apache2+mysql+Eclipse debug完全配置
    php程序的国际化(转载)
    PHP加载mysql DDL会失败
    mysql绿色版注册服务
    DEDE利用自由列表创建全站RSS订阅内容更新整站.xml文档
    PHP模拟多线程请求
    在Mac OS X中配置Apache + PHP + MySQL(转)
    ThinkPHP框架项目开发专题自动验证
  • 原文地址:https://www.cnblogs.com/lynsha/p/13398380.html
Copyright © 2020-2023  润新知