PyQt5学习笔记:1 基本流程与主窗口

一直沉迷工作,没时间写博客(借口?),最近公司休假,偷得浮生半日闲,把以前在Evernote上保存的笔记都分享出来,发表成博客,以共勉。

首先简单说一下,PyQt目前我用过的最好的GUI库,GTK3的Bug很多,MFC又晦涩又不能跨平台。我用的PyQt5.4.2+python3.4.3,用Eric6开发环境。不得不说,使用Eric6编译UI文件实在是太方便了。

好了下面从hello-world开始简单介绍:

1 先导入QT5中的QtWidgets通用窗口库。
2 自定义窗口类MyWnd,继承自QtWidgets.QWidget。
3 实例化一个MyWnd的对象mw,调用mw.show()。
4 固定套路,事件循环: sys.exit(app.exec_())。

下面是完整的代码(显示一个空白窗口):

import sys
from PyQt5 import QtWidgets

class MyWindow(QtWidgets.QWidget):
    def __init__(self):
        super(MyWindow, self).__init__()

def startMe():
    app = QtWidgets.QApplication(sys.argv)
    w = MyWindow()
    w.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    startMe()

----------------

下面再讲一下mainwindow一些用法:

1 在QT设计师里新建一个MainWindow窗口。
2 添加子菜单(逐级),并在右下角的动作编辑器里,为每个action重命名下。
   注:此处有个概念需要澄清, 对于菜单,每个项就是一个action,即QAction类。
3 添加图标资源,在右下角,点击资源浏览器,添加图标资源:

PyQt5学习笔记:1 基本流程与主窗口_第1张图片

4 关联应用图标资源:
PyQt5学习笔记:1 基本流程与主窗口_第2张图片


5 添加工具栏,如下,空白处右键:

PyQt5学习笔记:1 基本流程与主窗口_第3张图片

然后在右下角的动作编辑器里,将某项拖拽到工具栏里。即可添加完成。


6 为MainWindow新建一个自定义的槽(如果你需要自定义槽的话):

PyQt5学习笔记:1 基本流程与主窗口_第4张图片


使用自定义槽(当然如果你仅需要系统内置槽,上面步骤无需进行):

PyQt5学习笔记:1 基本流程与主窗口_第5张图片


注意QAction类点击的信号是triggered而不是clicked。QAction根本没有此信号。

5 编译资源文件(.ui和.qrc):
> C:\Python34\Lib\site-packages\PyQt5\pyuic5.bat  uwnd1.ui -o uwnd1.py
> C:\Python34\Lib\site-packages\PyQt5\pyrcc5.exe r_icons.qrc -o r_icons _rc .py  (注意后缀_rc相当重要,因为uwnd1.py的最后一句会import它,不信打开看看)
然后新建一个main.py文件,输入:

from PyQt5 import QtWidgets, QtCore
from uwnd1 import Ui_MainWindow
from PyQt5.QtWidgets import QMainWindow,QMessageBox
import sys

class MyWnd(QMainWindow, Ui_MainWindow):
     def __init__(self):
        super(MyWnd, self).__init__()
        self.setupUi(self)

    def openmsg(self):
        res = QMessageBox.information(self, "打开", "U clicked.",
                QMessageBox.StandardButtons(QMessageBox.Yes))
        # statusBar()是QMainWindow类自带的,首次运行此方法时,会自动检测状态栏是否存在并自动生成.
        self.statusBar().showMessage("状态栏: I am showing... ")

def startMe():
    app = QtWidgets.QApplication(sys.argv)
    dlg = MyWnd()
    dlg.show()
    sys.exit(app.exec_())
   
if __name__ == "__main__":
    startMe()
运行此文件,即可得到预期的效果。也可以使用Ctrl+R快捷键。

最后结果如下:

PyQt5学习笔记:1 基本流程与主窗口_第6张图片

可以看到此程序拥有菜单栏、工具栏、任务栏,其实各个操作还关联了快捷键,只是没法截图出来。




你可能感兴趣的:(编程点滴,PyQt5)