#一、python版
转载自https://www.cnblogs.com/tkinter/p/5632245.html
##安装(python3.5下使用)
pip install pyqt5
pip install PyQt5-tools
##简单使用
###1、制作界面
a)打开qt designer(python安装目录下Lib\site-packages\pyqt5-tools\designer.exe)
b)新建一个界面
file ->new->mainwindow->OK
其中,区域1是UI界面制作导向,QtDesigner为我们提供了一些常用模块,非常方便;区域2是UI控件列表;区域3是控件属性列表;区域4是Action Editor编辑列表;区域5信号和槽的编辑列列表;区域6是资源处理窗口。
###2、信号和槽
Edit—>Edit Signals/Slots,然后光标移到按钮上点击拖拽,这时会弹出一个编辑框,编辑完信号和槽后,需要去文件中实现槽函数
i.信号绑定槽
self.pushButton.clicked.connect(self.firtPyQt5_button_click)
ii.信号绑定多个槽
self.pushButton.clicked.connect(self.firtPyQt5_button_click)
self.pushButton.clicked.connect(self.firtPyQt5_button_click_2)
iii.信号绑定信号
self.pushButton.clicked.connect(self.firtPyQt5_button_click)
self.pushButton1.clicked.connect(self.pushButton.clicked)
iv.信号与信号,信号与槽的解绑
self.pushButton1.clicked.disconnect(self.pushButton.clicked)
self.pushButton.clicked.disconnect(self.firtPyQt5_button_click_2)
v,自定义信号
PyQt5提供了QtCore.pyqtSignal函数来产生一个signal,之后就是熟悉的绑定操作了,看个实例就清楚了
class EmitSignal(QWidget):
def __init__(self):
super(EmitSignal,self).__init__()
self.customSignal = pyqtSignal()
def emitCustomSignal(self):
self.customSignal.emit()
###3、资源文件
在QtDesigner引用资源文件之前,需要先准备一个qrc文件,它跟xml文件比较类似,用来制定资源文件的路径
<RCC version="1.0">
<qresource>
<file>qt.png</file>
<file>penguin.jpg</file>
</qresource>
</RCC>
然后引用
###4、将UI文件转为python代码
pyuic5 -o firstPyQt5.py firstPyQt5.ui
###5、编写main.py
import sys
from PyQt5.QtWidgets import QApplication , QMainWindow
from firstPyQt5 import *
if __name__ == '__main__':
'''
主函数
'''
app = QApplication(sys.argv)
mainWindow = QMainWindow()
ui = Ui_mainWindow()
ui.setupUi(mainWindow)
mainWindow.show()
sys.exit(app.exec_())
g)运行程序
###6、pyqt线程
启动界面的线程暂称为UI线程。界面执行命令时都在自己的UI线程中。
如果在UI线程中执行网络连接和数据库操作等耗时的操作,界面会被卡住,Windows下有可能会出现“无响应”的警告。
阻塞UI线程会降低用户体验和应用稳定性。因此我们可以把耗时操作放在线程中去执行。
QThread代表一个线程,我们可以复写run函数来执行我们要的操作。
QThread可以使用 QtCore.pyqtSignal 来与界面交互和传输数据。
例子:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'hh.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtWidgets
class TimeThread(QtCore.QThread):
signal_time = QtCore.pyqtSignal(str, int) # 信号
def __init__(self, parent=None):
super(TimeThread, self).__init__(parent)
self.working = False
self.num = 0
def start_timer(self):
self.num = 0
self.working = True
def stop_timer(self):
self.working=False
def run(self):
while self.working:
self.signal_time.emit("Running time:", self.num) # 发送信号
self.num += 1
self.sleep(1)
class Ui_MainWindow(object):
def __init__(self):
super(Ui_MainWindow, self).__init__()
self.timer_t = TimeThread()
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(350, 170, 300, 23))
self.pushButton.setObjectName("pushButton")