美文网首页
PyQt5学习笔记04 - QWidget窗口控件基类

PyQt5学习笔记04 - QWidget窗口控件基类

作者: 星星在线 | 来源:发表于2019-05-23 23:17 被阅读0次

       本来这一篇是想写一下怎么使用Qt Designer去设计一个界面的,但是我现在通常都是用代码去直接写界面很少用设计器。因为Qt Designer并不是为了python而写的,所以用起来不是很方便。很多初学者可能都比较喜欢使用Qt Designer,因为所见即所得,我以前做MFC开发的时候也是一直用界面设计器,主要是VS的功能非常强大,而且界面设计和代码编写都是使用这个IDE,契合非常完美。但是Qt Designer就一样了。另外一点就是因为你对PyQt5的布局管理器的使用不熟悉,如果你学会了布局管理器的使用,那这些控件的布局其实非常简单。他并不是你所想象的用代码去按像素调整窗口,PyQt5的布局管理器是根据左右布局、上下布局或者栅格布局自动帮你调整到对应的位置,你只需要进行一些微调就可以了。我们在网上搜到的很多代码都是直接去设置控件的绝对位置,这样就误导了很多人。PyQt5的布局管理器是非常好用的,它可以帮我们把大概的布局很简单的就设计好。所以后期我的教程会尽量使用布局管理器。同时在使用的地方也会加上一些注释,这样大家代码看得多了以后就会对布局管理器有一些了解。所以这一篇呢,我们就从控件开始吧,后期如果有时间的话,我再把Qt Designer简单使用写一篇文章。

    QWidget

       一个程序可以拥有多个窗口,每个窗口都会承载多个控件。所有的窗口和控件都是直接或者间接的继承自QWidget类。

    窗口坐标系统

      就像大多数GUI系统一样,PyQt5使用的坐标系统也是以左上角为原点(0, 0)。

    import sys
    from PyQt5.QtWidgets import QApplication, QWidget
    
    app = QApplication(sys.argv)
    widget = QWidget()
    widget.setGeometry(300, 300, 500, 500)
    widget.setWindowTitle("我是主窗口控件")
    w1 = QWidget(widget)
    w1.setGeometry(100, 100, 200, 200)
    w1.setWindowTitle("我是子控件")
    w1.setStyleSheet("background-color:blue")
    widget.show()
    sys.exit(app.exec_())
    

    对于独立的顶层窗口,它的X、Y坐标是针对整个屏幕的,也就是说widget控件设置的300,300是在屏幕上的偏移位置。对于子控件,它的X、Y坐标是针对其父控件的,w1控件设置的100,100是针对widget控件的,在整个屏幕上就是400,400位置。X坐标从上往下一次递增,值越大越靠近屏幕下方,Y坐标从左往右依次递增,值越大越靠近屏幕右方。在PyQt5中获取控件位置有以下三种方式:

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

    常用的几何结构

    QWidget有两种几何结构。

    • 不包含外边框。
    • 包含外边框。

    对于主窗口控件,不包含边框的部分就是客户区,我们可以在其中添加子控件。

    不包含外边框

    客户区的大小是一个QRect类。要改变窗口的大小,可以使用如下函数:

    1. 修改窗口大小
      QWidget.resize(width, height)
      Qwidget.resize(QSize)

    2.获取窗口大小
    QWidget.size()

    3.获取窗口的宽和高
    QWidget.width()
    QWidget.height()

    4.设置窗口的高度和宽度
    QWidget.setFixedWidth(width)
    QWidget.setFixedHeight(height)
    QWidget.setFixedSize(QSize)
    QWidget.setFixedSize(width, height)
    设置固定宽度和高度,设置以后,窗口的大小不能改变。

    QWidget.setGeometry(x, y, width, height)
    QWidget.setGeometry(QRect)
    同时设置窗口的位置和大小

    包含外边框

    QWidget包含边框是窗口在整个屏幕上显示的整个区域。

    1. 获取窗口的位置和大小
      QWidget.frameGeometry()

    2.设置窗口的位置
    QWidget.move(x, y)
    QWidget.move(QPoint)

    3.获得窗口左上角坐标
    QWidget.pos()

    下面再来一个例子结束今天的文章:

    import sys
    from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        main_widget = QWidget()
        main_widget.setWindowTitle("我是主窗口控件")
    
        # 相当于main_widget.setGeometry(300, 300, 500, 500)
        main_widget.resize(500, 500)
        main_widget.move(300, 300)
    
        # QPushButton(main_widget)的意思是将btn作为main_widget的子控件,这样在移动位置时才会以父控件为参照
        # 相当于btn.setParent(main_widget)
        btn = QPushButton(main_widget)
        btn.setText("我是按钮")
        btn.setFixedSize(100, 30)
        btn.move(100, 100)
    
        # 打印一下位置信息
        print("main_widget")
        print("x=%d, y=%d" % (main_widget.x(), main_widget.y()))
        print("width=%d, height=%d" % (main_widget.width(), main_widget.height()))
    
        print("geometry")
        print("x=%d, y=%d" % (main_widget.geometry().x(), main_widget.geometry().y()))
        print("width=%d, height=%d" % (main_widget.geometry().width(), main_widget.geometry().height()))
    
        print("frameGeometry")
        print("x=%d, y=%d" % (main_widget.frameGeometry().x(), main_widget.frameGeometry().y()))
        print("width=%d, height=%d" % (main_widget.frameGeometry().width(), main_widget.frameGeometry().height()))
        main_widget.show()
        sys.exit(app.exec_())
    

    如果你觉得我的文章还可以,可以关注我的微信公众号,查看更多实战文章:Python爬虫实战之路
    也可以扫描下面二维码,添加我的微信公众号

    公众号

    相关文章

      网友评论

          本文标题:PyQt5学习笔记04 - QWidget窗口控件基类

          本文链接:https://www.haomeiwen.com/subject/fteizqtx.html