川小胖学python

博客园 首页 新随笔 联系 订阅 管理

在这里,我将根据自己的学习历程从初级到高级介绍pyqt5。因为是学到哪里就写道哪里,所以内容排版比较随意。有两点问题需要先说明:

1.虽然界面的设计可以借助qt designer进行拖拽创建,并且可以大大简化操作,提高效率。但个人感觉对于初学者来说,先理解pyqt5的各函数和方法,对加深理解大有帮助。

2.pyqt5的使用应该坚持界面于逻辑分离的原则。本节因为是基础介绍,暂未将界面于逻辑分离,后续内容会涉及。

一、基本窗口

在这里,我们先通过一个小例子对pyqt5有意个初步的认知。

import sys,time
from PyQt5.QtWidgets import QApplication,QWidget
#这里导入了PyQt5.QtWidgets模块,里面包含了基本的组件

if __name__=="__main__":
    app = QApplication(sys.argv)
    win = QWidget()
    win.resize(500,400) #窗口宽500px,高400px
    #win.show()
    #time.sleep(3)
    win.move(500,500) #将窗口移动到屏幕上(500,500)处
    win.setWindowTitle("hello world")
    win.show()
pyqt5小例子

注:

  • 退出时app.exec_() 之所以在exec后加了一个下划线,是因为exec时pyth的关键字。
  • 这个例子中引入了time模块是为了体现出窗口位置的变化过程(已注释掉)。

      通过上面这个小例子,我们已经了解了pyqt5的基本功能,了解设置窗口大小,位置以及标题和窗口显示的基本操作。

显示效果如下

 

二、添加小控件

上一节的内容只是单个基础窗口的显示,我们还可以为窗口设置一些具有特殊功能的按键(pushbutton),并设置提示信息,提高操作友好度。下面是第二个小例子。

 1 import sys
 2 from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QToolTip
 3 from PyQt5.QtGui import QIcon,QFont
 4 from PyQt5.QtCore import QCoreApplication
 5 
 6 
 7 class Win_Example(QWidget):
 8 
 9     def __init__(self):
10         super().__init__()
11         self.initUI()
12 
13     def initUI(self):
14         self.setGeometry(300,300,300,300)
15         self.setWindowTitle('第二个小例子')
16         self.setWindowIcon(QIcon('chuan.ico')) #设置窗口图标,即窗体左上角的图标,注意路径问题
17 
18         pushbtn =QPushButton('退出',self)
19         pushbtn.resize(pushbtn.sizeHint()) #resize是设置按钮的大小,sizehint为默认大小
20         pushbtn.move(80,80) #设置按钮的坐标为(80,80)
21         pushbtn.clicked.connect(QCoreApplication.instance().quit) #连接事件和信号
22 
23         '''设置提示信息的格式,内容'''
24         QToolTip.setFont(QFont('楷体', 15))
25         # self.setToolTip('这是提示信息')
26         self.setToolTip('这是<b>加粗的提示信息<b>') #两个<b>之间的文字会加粗显示
27         pushbtn.setToolTip('这是个按钮')
28 
29 
30 if __name__ == "__main__":
31     app = QApplication(sys.argv)
32     win = Win_Example()
33     win.show()
34     sys.exit(app.exec_())
pyqt5小例子

在上面的小例子中,我们加入了更多的命令,并采用了面向对象的方法来编程。

import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QToolTip
from PyQt5.QtGui import QIcon,QFont
from PyQt5.QtCore import QCoreApplication
  • QPushButton是一个按键类,可以为窗口添加按键;
  • QToolTip是提示类,可以设置提示信息;
  • QIcon和QFont是用来设置图标和字体样式;
self.setWindowIcon(QIcon('chuan.ico'))

  这里为窗口设置了图标,需要注意图标的路径问题。本例中,图标就在当前目录下。另外,图标图片为ico格式,最好选用32*32大小。当然,如果选择更大的图片,实际显示时会自动压缩。

pushbtn =QPushButton('退出',self)
pushbtn.resize(pushbtn.sizeHint())
pushbtn.move(80,80) 
pushbtn.clicked.connect(QCoreApplication.instance().quit) 

  这里设置了按钮,并将pushbutton的单击事件与quit函数连接。这里涉及了信号和槽的概念,后续会专门学习,这里不做深入讨论。

  resize()可以自定义窗口的大小。sizehint()窗体默认大小

 QToolTip.setFont(QFont('楷体', 15))
  self.setToolTip('这是<b>加粗的提示信息<b>') 
  pushbtn.setToolTip('这是个按钮')

  这里为窗体和按键都设置了提示信息,请注意:<b>...<b>  <i>...<i>   <u>...<u>分别可以设置提示信息加粗、斜体、下划线。这三中显示方法可以单独使用,也可以组合使用。另外,尖括号中的b、i、u大小写均可。

显示效果如下:(因为qq截图的原因,图片上的鼠标箭头未能正确显示)

 三、设置中心显示和对话框

我们平时在操作软件时,有时候为了防止错误操作,会增加一个交互界面确认操作,通识为了美观,通常希望窗口在屏幕中心显示。现在,我们就来学习这两个方法。在第二节的基础上,我们更新代码如下:

import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QToolTip,QMessageBox,QDesktopWidget
from PyQt5.QtGui import QIcon,QFont
from PyQt5.QtCore import QCoreApplication


class Win_Example(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(300,300,300,300)
        self.setWindowTitle('第二个小例子')
        self.setWindowIcon(QIcon('chuan.ico')) #设置窗口图标,即窗体左上角的图标,注意路径问题
        self.center_show()

        pushbtn =QPushButton('退出',self)
        pushbtn.resize(pushbtn.sizeHint()) #resize是设置按钮的大小,sizehint为默认大小
        pushbtn.move(80,80) #设置按钮的坐标为(80,80)
        pushbtn.clicked.connect(QCoreApplication.instance().quit) #连接事件和信号

        '''设置提示信息的格式,内容'''
        QToolTip.setFont(QFont('楷体', 15))
        # self.setToolTip('这是提示信息')
        self.setToolTip('这是<b>加粗的提示信息<b>') #两个<b>之间的文字会加粗显示
        pushbtn.setToolTip('<u>这是个按钮<u>')

    def closeEvent(self, QCloseEvent):
        res = QMessageBox.question(self,'对话框','是否确认退出',QMessageBox.Yes|QMessageBox.No,QMessageBox.No)
        if res == QMessageBox.Yes:
            QCloseEvent.accept()
        else:
            QCloseEvent.ignore()

    def center_show(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = Win_Example()
    win.show()
    sys.exit(app.exec_())
pyqt5小例子

可以看到,首先我们有新引入了两个类QmessageBox和QDesktopWidget。前者关于提示信息的对话框,后者可以提供屏幕的有关信息。

显示效果如下:

 

下面,我们来分析代码

    def closeEvent(self, QCloseEvent):
        res = QMessageBox.question(self,'对话框','是否确认退出',QMessageBox.Yes|QMessageBox.No,QMessageBox.No)
        if res == QMessageBox.Yes:
            QCloseEvent.accept()
        else:
            QCloseEvent.ignore()

这个函数功能是用户在点击右上角按键退出时,弹出消息框确认是否真的要退出。有几个知识点需要说明下:

3.1 QMessageBox消息框的几种类型

  •   QMessageBox.information 信息框
  •   QMessageBox.question 问答框
  •   QMessageBox.warning 警告
  •   QMessageBox.ctitical危险
  •   QMessageBox.about 关于

可根据事件的严重级别选择合适的消息框,这一点类似logger。

3.2 注意QMessageBox.question()的格式

QMessageBox.question(self,'对话框','是否确认退出',QMessageBox.Yes|QMessageBox.No,QMessageBox.No)意义是:消息框标题为“对话框“,消息框内容为“是否确认退出”,按键1为yes,按键2为no,默认按键为no。注意按键1和按键2中间一“|”分隔

    def center_show(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

 设置窗口剧中的方法为通过self.frameGeometry()获得主窗口大小并传给对象qr,接着QDesktopWidget().availableGeometry().center()获取显示器分辨率并找到中心点位置,qr.moveCenter(cp)将主窗口中心移动到屏幕中心,self.move(qr.topLeft())窗口的左上角的坐标设置为qr的矩形左上角的坐标,这样就把窗口居中了。

   当然,这不是唯一的方法,还可以采用如下方法:

    def center(self):
        screen = QDesktopWidget().screenGeometry() #用来计算显示屏幕大小,QDsktopWidget是描述显示屏幕的类
        size = self.geometry() #获取窗口大小
        self.move((screen.width() - size.width()) / 2,(screen.height() - size.height()) / 2)

  以上两种方法都可以。

posted on 2019-03-06 20:54  川小胖学Python  阅读(3225)  评论(0编辑  收藏  举报