PyQt5学习随笔01--计算一个目录里我们码的代码行数&&PyQt的多线程通信
今天突然想知道自学习Python以来我一共码了多少行代码了,于是写了一个简单的程序:
__author__ = 'jiangzhiheng'
# coding=utf-8
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import glob global lines
lines = 0 def 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_()
执行效果:
可是发现出了一个问题。就是点击“測试”button開始计算时,页面停止响应,直到计算结束,期间数字显示板一直显示为0。
发现原因例如以下:由于 Qt 中全部界面都是在 UI 线程中(也被称为主线程,就是运行了QApplication::exec()的线程),在运行一些耗时的操作,就会堵塞 UI 线程,从而让界面停止响应。为避免这个问题,考虑另外加一个线程运行那个循环:
__author__ = 'jiangzhiheng'
# coding=utf-8
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import glob #glob模块获取文件名称,相似于windowsde 搜索功能。支持"?,[],*"通配符,使用方法如以下样例所看到的 global lines #定义一个全局变量用于计数
lines = 0
global directory
directory = '' 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_()
PyQt5学习随笔01--计算一个目录里我们码的代码行数&&PyQt的多线程通信的更多相关文章
- VS里统计整个解决方案代码行数的方法
VS里统计整个解决方案代码行数,在查找里输入正则表达式:b*[^:b#/]+.*$.如下图所示: 结果如下图所示:
- 精确计算TFS中新增以及更改的代码行数
<configuration> <configSections> <section name="LOCTargets" type="Cons ...
- Linux统计目录下文件个数及代码行数
1. 统计当前目录下,php文件数量 find ./ -name "*.php" | wc -l 2. 统计当前目录下所有php文件代码行数 find ./ -name " ...
- 如何查找一个目录中所有c文件的总行数
如何查找一个目录中所有c文件的行数 面试题问到了一题,如何统计wc文件夹下所有文件的行数,包括了子目录. 最后在 https://blog.csdn.net/a_ran/article/details ...
- python3 计算文件夹中所有py文件里面代码行数,注释行数,空行数
import os,re #代码所在位置 FILE_PATH = './' def analyze_code(codefilesource): ''' 打开一个py文件统计其中的代码行数,包括空格和注 ...
- PHP计算一个目录文件大小方法
<?php $dirfile='../hnb'; /** *计算一个目录文件大小方法 *$dirfile:传入文件目录名 **/ function dirSize($dirfile) { $di ...
- Python计算一个项目中含有的代码行数
最近想要知道以前做过的project有多少行代码,因为文件太多,直接手工数效率太低,于是编写一个python程序用来计算一个project有多少代码行. 首先,在一个项目中,有很多子文件夹,子文件夹中 ...
- ubuntu输入某个目录测试该目录里.C文件里代码行数shell脚本
#!/bin/bash echo "★☆ ★☆ ★☆ ★☆ ★☆★☆★☆ ★☆ ★☆ ★☆ ★☆★" echo "★☆ 统计代码行数 ☆★&qu ...
- 统计文件夹下java代码行数的小程序--主要是学习任务队列的思想
首先感谢czbk的老师,录制的视频,让我们有这么好的学习资料.……—— 统计文件夹java文件的行数,首先想到的肯定是用递归的方法,因为文件夹下面可能包含文件夹,用递归的方法,代码容易写.(这和写简单 ...
随机推荐
- 安卓中Canvas实现清屏效果
可以在代码里面添加: paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); canvas.drawPaint(paint) ...
- ACM_开挂的小G
开挂的小G Time Limit: 2000/1000ms (Java/Others) Problem Description: 小G寒假在家没网络,闲着没事干又看不下书,就玩起了单机游戏ACM_Ga ...
- Android内存管理(10)MAT: 基本教程
原文: http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.mat.ui.help%2Fgettingstarted%2Fbasic ...
- MySQL的安装和启动
一.MySQL各类安装方法的比较 在Linux系统下,MySQL有3种主要的安装方式,分别是:RPM安装.二进制安装.源码安装.三种安装方式的优缺点如下表所示: RPM安装 二进制安装 源码安装 ...
- V-SQL的简单使用
V-SQL概述: V-SQL,是对同望V3平台时间多数据支持非常重要的基础引擎.因为各个数据库的查询语句的语法有所不同,V-SQL的功能是把查询语句解析为执行系统连接的数据库(MSSQL,Oracle ...
- Elasticsearch_Lucene基础
Lucene基本概念 文档(document):索引与搜索的主要载体,它包含一个或多个字段,存放将要写入索引的或将从索引搜索出来的数据. 字段(field):文档的一个片段,它包含字段的名称和字段的内 ...
- CSS——display:flex
Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 设为Flex布局以后,子元素的float.clear和vertical-align属性 ...
- 批量注释LOG
sed -i "s/LOG/\/\/ LOG/g" `grep LOG\(TRACE\) -rl .`
- JS数组reduce()方法
1.语法 arr.reduce(callback,[initialValue]) reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上 ...
- 创建pod索引库(Specs)
专门用来存放xxx.podspec 的索引文件的库就叫做索引库.我们需要将这些索引文件上传到远程索引库才能保证其他的人能够拿来用. 创建一个远程索引库和本地索引库对应起来,步骤如下: 1.登录开源中国 ...