QMainWindow、QWidget和QDialog三个类都是用来创建窗口的,可以直接使用,也可以继承后再使用,在Qt Designer创建UI文件可以选择这三种窗口类型。
如果是主窗口,就使用QMainWindow类,如果是对话框,就使用QDialog类,如果不确定,或者有可能作为顶层窗口,也有可能嵌入到其他窗口中,那么就使用QWidget类。
让我们看看具体区别吧\~
1、 QMainWindow窗口
QMainWindow主窗口为用户提供一个应用程序框架,它有自己的布局,可以在布局中添加控件。在主窗口中可以添加控件,比如将工具栏、菜单栏和状态栏等添加到布局管理器中。
QMainWindow类中比较重要的方法如下表所示:
QMainWindow有自己的布局不能设置布局(使用setLayout()方法)。
聊一个实用功能,当主窗口打开运行后,实现默认电脑屏幕居中,效果如下所示:
实现代码如下所示:
```python from PyQt5.QtWidgets import QDesktopWidget, QApplication ,QMainWindow import sys
class Winform( QMainWindow):
def __init__(self, parent=None):
super( Winform, self).__init__(parent)
self.setWindowTitle('主窗口放在屏幕中间例子')
self.resize(370, 250)
self.center()
def center(self):
screen = QDesktopWidget().screenGeometry()
size = self.geometry()
self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)
if name == "main": app = QApplication(sys.argv)
win = Winform()
win.show()
sys.exit(app.exec_())
```
以下语句用来设置QWidget窗口的大小,宽度为370像素,高度为250像素。
python self.resize(370, 250)
以下语句用来计算显示屏幕的大小:(screen.width()*screen.height()),其中\ QDesktopWidget是描述显示屏幕的类,通过QDesktopWidget().screenGeometry()来获得屏幕的大小。
python screen = QDesktopWidget().screenGeometry()
以下语句用来获取QWidget窗口的大小:(size.width()*size.heiget())。
python size = self.geometry()
以下语句将窗口移动到屏幕中间。
python self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)
2、QWidget窗口
基础窗口控件QWidget类是所有用户界面对象的基类,所有的窗口和控件都直接或间接继承自QWidget类。
窗口控件(Widget,简称“控件”)是在PyQt中建立界面的主要元素。在PyQt中把没有嵌入到其他控件中的控件称为窗口,一般窗口都有边框、标题栏。窗口是指程序的整体界面,可以包含标题栏、菜单栏、工具栏、关闭按钮、最小化按钮、最大化按钮等;控件是指按钮、复选框、文本框、表格、进度条等这些组成程序的基本元素。一个程序可以有多个窗口,一个窗口也可以有多个控件。
在Qt官方提供的帮助文档中:“Qt 5.14 Qt Widgets Window and Dialog Widgets”,可见QWidget几何结构如下所示:
从上图可以看出,这些成员函数分为三类:
- QWidget直接提供的成员函数: x()、y()获得窗口左上角的坐标,width()、 height()获得客户区的宽度和高度;
- QWidget的geometry()提供的成员函数:x()、y()获得客户区左上角的坐标,width()、 height()获得客户区的宽度和高度;
- Widget的frameGeometry()提供的成员函数:x()、y()获得窗口左上角的坐标,width()、 height()获得包含客户区、标题栏和边框在内的整个窗口的宽度和高度。
而且可以知道QWidget有两种常用的几何结构:
- 不包含外边各种边框的几何结构;
- 包含外边各种边框的几何结构。
1、QWidget不包含边框的常用函数
一般情况下,不包含边框的部分是客户区,这里面就是我们正常操作的地方,可以添加子控件。这部分是一个长方形,会有大小和位置。大小就是指