PyQt5学习随笔01--计算一个文件夹里我们码的代码行数&&PyQt的多线程通信
来源:互联网 发布:python 符号错误 编辑:程序博客网 时间:2024/06/03 10:59
今天突然想知道自学习Python以来我一共码了多少行代码了,于是写了一个简单的程序:
__author__ = 'jiangzhiheng'# coding=utf-8from PyQt5.QtCore import *from PyQt5.QtWidgets import *from PyQt5.QtGui import *import globglobal lineslines = 0def count_work(): main()def main(): global lines py_filenames = glob.glob('C:\\Users\\jiangzhiheng\\Desktop\\python\\*.py') for filename in py_filenames: if filename: for line in open(filename,'rb').readlines(): #以二进制读,否则会出现UnicodeEncodeError if line: lines+=1 #统计代码行数 lcdNumber.display(lines) myfile = open('all.txt','a') myfile.write(line.decode('utf-8')+'\n') #用decode函数将二进制数据转为str myfile.close()app= QApplication([])mywindow = QWidget()layout = QVBoxLayout(mywindow) #垂直布局lcdNumber = QLCDNumber()layout.addWidget(lcdNumber) #增加数字显示屏button = QPushButton('测试')layout.addWidget(button) #增加按钮button.clicked.connect(count_work) #将button按钮连接到count_work函数槽mywindow.show()app.exec_()
运行效果:
但是发现出了一个问题,就是点击“测试”按钮开始计算时,页面停止响应,直到计算结束,期间数字显示板一直显示为0。发现原因如下:因为 Qt 中所有界面都是在 UI 线程中(也被称为主线程,就是执行了QApplication::exec()的线程),在执行一些耗时的操作,就会阻塞 UI 线程,从而让界面停止响应。为避免这个问题,考虑另外加一个线程执行那个循环:
__author__ = 'jiangzhiheng'# coding=utf-8from PyQt5.QtCore import *from PyQt5.QtWidgets import *from PyQt5.QtGui import *import glob #glob模块获取文件名,类似于windowsde 搜索功能,支持"?,[],*"通配符,用法如下面例子所示global lines #定义一个全局变量用于计数lines = 0global directorydirectory = ''class MyThread(QThread): #创建一个新QThread类 def __init__(self): super(MyThread,self).__init__() def run(self): #重新定义run函数,run函数就是新线程要执行的的代码 global lines py_filenames = glob.glob(directory+'\\*.py') for filename in py_filenames: if filename: for line in open(filename,'rb').readlines(): #以二进制读,否则会出现UnicodeEncodeError if line: lines+=1 #统计代码行数 lcdNumber.display(lines) myfile = open('Lines.txt','a') myfile.write(line.decode('utf-8')+'\n') #用decode函数将二进制数据转为str myfile.close()def main(): ##定义槽函数 global directory #引用全局变量 directory = QFileDialog.getExistingDirectory(mywindow,'选择文件夹', 'C:\\') #这里改为自己选择文件夹 myThread = MyThread() myThread.start()app= QApplication([])mywindow = QWidget() #创建一个新窗口layout = QVBoxLayout(mywindow) #垂直布局lcdNumber = QLCDNumber()layout.addWidget(lcdNumber) #增加数字显示屏button = QPushButton('测试')layout.addWidget(button) #增加按钮button.clicked.connect(main) #将button按钮连接到count_work函数槽mywindow.show()app.exec_()
0 0
- PyQt5学习随笔01--计算一个文件夹里我们码的代码行数&&PyQt的多线程通信
- Objective-C 计算文件夹里的代码行数
- 计算整个文件夹的代码行数
- 黑马程序员 用OC实现的一个计算文件夹下代码行数的小程序
- 一个计算代码行数的程序
- NSFileManager--计算文件夹的行数
- 李明杰老师关于计算整个文件夹的代码行数练习
- 计算一个文件夹里的字符数
- PyQt5学习笔记13----pyqt线程间通信
- PyQt5学习笔记13----pyqt线程间通信
- 计算工程的代码行数
- Python计算一个项目中含有的代码行数
- 计算一个文本文件的行数
- PyQt5学习笔记14----初识pyqt多线程操作
- PyQt5的多线程
- 黑马程序员——OCFoundation框架-9:计算某个文件夹下的代码行数
- Eclipse里显示代码的行数
- 统计工程里的代码行数
- UIScrollView添加控件,控件距离顶部始终有间距的问题
- [leetcode-230]Kth Smallest Element in a BST(java)
- Linux系统下buffer内存与cache内存的区别
- Java程序员面试中的多线程问题
- 数据结构与算法-归并排序
- PyQt5学习随笔01--计算一个文件夹里我们码的代码行数&&PyQt的多线程通信
- Java- 内部类与匿名类
- 我的PSoC学习(二)(PSoC Creator 2.0+win7+CY8C38):一些PSoC学习手记
- 百度最新面试题集锦
- selenium(webdriver)学习笔记6--Alert/Confirm/Prompt的处理(Java版)
- Python写Excel文件
- POJ 2253 Frogger(最短路--floyd变形)
- Netty 源码分析之ByteToMessageDecoder
- ios学习之旅--oc对象的关系