189 8069 5689

怎么理解基础窗口控件QWidget

这篇文章给大家介绍怎么理解基础窗口控件QWidget,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

成都创新互联公司专业为企业提供长子网站建设、长子做网站、长子网站设计、长子网站制作等企业网站建设、网页设计与制作、长子企业网站模板建站服务,十余年长子做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

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

 

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_())
 
怎么理解基础窗口控件QWidget  

对于独立的顶层窗口,它的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 = 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_())
 
怎么理解基础窗口控件QWidget  
怎么理解基础窗口控件QWidget    

关于怎么理解基础窗口控件QWidget就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


当前文章:怎么理解基础窗口控件QWidget
新闻来源:http://cdxtjz.com/article/gshocj.html

其他资讯