您的位置:首页 > 编程语言 > Qt开发

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

2018-03-13 09:30 351 查看
一直沉迷工作,没时间写博客(借口?),最近公司休假,偷得浮生半日闲,把以前在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 添加图标资源,在右下角,点击资源浏览器,添加图标资源:



4 关联应用图标资源:



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



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

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



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



注意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快捷键。

最后结果如下:



可以看到此程序拥有菜单栏、工具栏、任务栏,其实各个操作还关联了快捷键,只是没法截图出来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: