python图形化界面pyqt_如何构造一个功能丰富的图形界面,Python使用PyQt5库轻松搞定...

上一篇内容我们使用PyQt5搭建了一个简易的GUI应用框架(图形界面编程技巧,用Python中PyQt5库快速创建一个应用程序框架),如果对于处理小的图形界面问题,这样的框架是足够了。但是,对于更复杂的GUI框架,仅仅知道这样的搭建还是远远不够的。

python图形化界面pyqt_如何构造一个功能丰富的图形界面,Python使用PyQt5库轻松搞定..._第1张图片不够用啊

今天,我们来详细了解一下PyQt5中窗体的类型,然后,我们使用QMainWindow主窗体来搭建一个更加复杂的应用程序界面。

窗体有哪些?

简单来讲,PyQt5给我们提供了三种类型的窗体及控件(这里的简单可以理解为日常使用,应该还有更复杂的控件,我这里没有深究):即QMainWindow、QDialog、QWidget控件(准确来讲是类)。

如果是创建一个主窗口,就使用QMainWindow类;

如果创建的是对话框,就使用QDialog类;

如果不确定,或者有可能作为顶层窗口,也有可能嵌入到其他窗口中,那么就使用QWidget类。

区别在哪

它们都是用来创建窗口的,可以直接使用,也可以继承后再使用。但它们的区别在于:

QMainWindow主窗口为用户提供一个应用程序框架,它有自己的布局,可以在布局中添加控件,QMainWindow窗口可以包含菜单栏、工具栏、状态栏、标题栏等,是常见的窗口形式,也可以说是GUI程序的主窗口。

python图形化界面pyqt_如何构造一个功能丰富的图形界面,Python使用PyQt5库轻松搞定..._第2张图片类似这样一种窗体(中规中矩)

QDialog是对话框窗口的基类,对话框主要用来执行短期任务,或者与用户进行互动,它是可以模态的,也是可以非模态的。QDialog窗口没有菜单栏、工具栏、状态栏等控件。

python图形化界面pyqt_如何构造一个功能丰富的图形界面,Python使用PyQt5库轻松搞定..._第3张图片类似这样的弹窗

QWidget类是所有用户对象界面控件的基类,所有窗口或控件都直接或者间接继承了QWidget类。一般情况下,我们将没有嵌入到其它控件的控件称为窗口,也叫顶层窗体(如tkinter中的toplevel)。QWidget类是QMainWindow类的父类。QMainWindow继承了QWidget的方法,但它定义的窗体对象更加精确、全面。

python图形化界面pyqt_如何构造一个功能丰富的图形界面,Python使用PyQt5库轻松搞定..._第4张图片QMainWindow提供了更多的接口

一个完整的主窗体

从上面的分析我们知道,QMainWindow就是定义了一个完整的主窗体对象。我们以一个画图板程序为例,来看下图。

python图形化界面pyqt_如何构造一个功能丰富的图形界面,Python使用PyQt5库轻松搞定..._第5张图片画图板窗口的界面内容

一个QMainWindow应该包含的内容有:菜单栏、工具栏、主工作区、状态栏,对于窗口,可以最大化、最小化、关闭这样的按钮应该也是需要的。

python图形化界面pyqt_如何构造一个功能丰富的图形界面,Python使用PyQt5库轻松搞定..._第6张图片一个完整的QMainWindow控件

QMainWindow接口

QMainWindow提供的接口中常用的有下面几个:

python图形化界面pyqt_如何构造一个功能丰富的图形界面,Python使用PyQt5库轻松搞定..._第7张图片提供了丰富的图形控件扩展

addToolBar:添加工具栏

centralWidget:返回窗口中心的一个控件,未设置时返回NULL

menuBar:返回主窗口的菜单栏

setCentralWidget:设置窗口中心的控件

setStatusBar:设置状态栏

statusBar:获取状态栏对象后,通过调用状态栏对象的showMessage(message int timeout=0)设置状态栏显示信息。第一个参数message是状态栏显示内容,第二个参数timeout表示显示延迟时间,毫秒为单位,设置为0时默认一直显示。

如何创建

我们如何创建一个居中位置的主窗体呢?不赘述,直接上代码。

python图形化界面pyqt_如何构造一个功能丰富的图形界面,Python使用PyQt5库轻松搞定..._第8张图片代码如下

#!/usr/bin/env python

# coding:utf-8

import sys

from PyQt5.QtWidgets import QMainWindow, QApplication, QDesktopWidget

from PyQt5.QtGui import QIcon

class MainWindow(QMainWindow):

def __init__(self, parent=None):

super(MainWindow, self).__init__(parent)

self.setWindowTitle('PyQt MainWindow示例')

self.resize(400, 200)

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)

app.setWindowIcon(QIcon('icon.png'))

form = MainWindow()

form.show()

sys.exit(app.exec_())

上面的代码只是创建了一个简单的窗体,如下图所示

python图形化界面pyqt_如何构造一个功能丰富的图形界面,Python使用PyQt5库轻松搞定..._第9张图片QMainWindow创建简单主窗体

可否创建一个更加复杂的窗体呢?

复杂一点的

通过上面分析我们知道,完整一点的窗体应该包括标题栏、菜单栏、工具栏、主要工作区域、状态栏这样一些内容。我们试着将这些内容全部添加到一个类中,创建一个完整的QMainWindow类。这样,我们以后创建窗体时,将这个类添加到PyCharm的live template中,这样就节省了我们不少时间呢!如果我们需要实现下面图示这样一个框架呢?

python图形化界面pyqt_如何构造一个功能丰富的图形界面,Python使用PyQt5库轻松搞定..._第10张图片示例程序

这个问题该怎么解决,留给小伙伴们下去自己去研究,下一篇内容我们会附上源代码。并使用上述源代码制作一个PyCharm的live template模板用以简化我们以后的输入。也就是说,以后我们搭建上面这样的界面,只需要输入几个(由你定)英文字母。是不是很酷?喜欢这个项目的小伙伴关注我……

python图形化界面pyqt_如何构造一个功能丰富的图形界面,Python使用PyQt5库轻松搞定..._第11张图片持续coding中

今天的内容就到这里了,喜欢的小伙伴点个赞呗,欢迎大家留言讨论……

转载请注明出处,百家号:Python高手养成

你可能感兴趣的:(python图形化界面pyqt)