python3.6+pyqt5 IDE: Pycahrm+Qtdesign 快速开发GUI程序学习资源

前言:

MrYx为了应对实验,这三天就囫囵吞枣学习了Pyqt5方面知识,总的来说py语言简洁,库多好用,Qtdesign画界面也很爽,还是有点趣。估计以后再也不会用pyqt方面的东西,写一下博客记这几天学的东西资源,以后再用的时候再看这篇博客学习吧。

搭建环境教程:

首先搭建开发环境:本人是win10系统,py3.6语言环境。
安装过程主要参考:教程1与教程2,1写的非常详细,2里面的Qtdesign,Pyuic,pydcc三个Tool在开发过程中非常好用,强烈安利。
注意:我在配置pyrcc5.exe的路径和教程不一样,我是在python/scripts目录下。

将pyqt5界面设计代码和功能代码分离:

首先这个代码编写风格是很方便的,因为当你后期美化修改页面的时候,只用考虑页面设计代码,并不用修改界面按钮的功能实现代码。具体方法

pyqt5控件使用:

最简单控件label(视频)
交互button(视频)
多行文本框textbrowser
消息框QMessageBox
标准输入框QInputDialog
标准文件打开保存框QFileDialog
添加菜单栏(视频)
PyQt4 QListWidget 使用教程
…..待补充其他控件我没怎么用到,也没去学。

pyqt5 信号槽机制:

信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方。它为高层次的事件处理自动生成所需要的附加代码。在我们所熟知的很多 GUI 工具包中,窗口小部件(widget)都有一个回调函数用于响应它们能触发的每个动作,这个回调函数通常是一个指向某个函数的指针。但是,在QT中信号和槽取代了这些凌乱的函数指针,使得我们编写这些通信程序更为简洁明了.

我写实验过程主要用到信号槽机制解决以下两个问题:
1.控件绑定槽函数实现控件功能。
2.自定义信号,实现多个窗口之间互相发送信息。:
我是通过给发送信息的窗口定义一个信号变量:eg:A_signature=QtCore.pyqtSignal(list)
在接收窗口里实例化一个发送窗口,并用接受窗口里某个函数接受这个发送窗口的信号,接收的函数就叫槽函数。

例如:在一个窗口输入a,b两个数,利用信号传到到另一个窗口的槽函数。

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from input import Ui_input
import answer_f
#这是输入两个数的窗口功能代码,界面代码就不放了
class input_ui(QtWidgets.QWidget,Ui_input):#继承了界面窗口Ui_input
    a_signal=QtCore.pyqtSignal(str,str)#定义信号,传递两个str类型的参数
    def __init__(self):
        super(input_ui, self).__init__()
        self.setupUi(self)
        self.cal.clicked.connect(self.click)
        self.win = answer_f.answer_ui()
        self.a_signal.connect(self.win.printans)#将信号与希望接受到它内容的槽函数绑定起来

    def click(self):
        a=self.input1.text()
        b=self.input2.text()
        self.a_signal.emit(a,b)#发射信号,同时触发绑定函数执行。
        self.win.show()


if __name__ == '__main__':
   app=QtWidgets.QApplication(sys.argv)
   win=input_ui()
   win.show()
   sys.exit(app.exec_())

接收界面

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from answer import Ui_answer
import input_f

class answer_ui(QtWidgets.QWidget,Ui_answer):

    def __init__(self):
        super(answer_ui, self).__init__()
        self.setupUi(self)

    def printans(self,a,b):#接受a_signal信号的槽函数,注意变量类型要一一对应
        ans=int(a)+int(b)
        ans=str(ans)
        self.label_ans.setText('结果是:'+ans)

pyqt5GUI外观美化:

通过网络视频课程学会在qtdesign修改label等控件的样式表,非常方便。

pyqt多线程:将页面线程与工作线程分开

我在写点菜界面调语音识别api时候发现当一个界面某个功能需要执行很长时间,界面就会无响应,应该就是多线程的问题,查阅到这个教程很快解决了。简单来说就是重新写一个从QtCore.QThread继承的类,在其run()方法里放进耗时比较长的工作。

pyqt打包:

看这个网络视频课程

以上学习资源基本都来自于以下链接,感谢他们付出:
http://blog.csdn.net/seeground/article/category/5880801
http://blog.csdn.net/a359680405/article/details/45167225
http://www.maiziedu.com/course/577/

你可能感兴趣的:(python语法糖)