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文件的行数,首先想到的肯定是用递归的方法,因为文件夹下面可能包含文件夹,用递归的方法,代码容易写.(这和写简单 ...
随机推荐
- RAP接口文档的安装
本机环境 系统:CentOS 6.7 64 位 MySQL 5.6 JDK 1.8 Tomcat 8 Redis 3.0.7 Rap 0.14.1 Rap 说明 官网:https://github.c ...
- Android从Camera中获取图片的两种方法
方法一: 此方法会由Camera直接产生照片回传给应用程序,但是返回的是压缩图片,显示不清晰 ? 1 2 3 4 5 6 try { Intent cameraIntent = new In ...
- jsp动态网页开发基础
JSP基础语法 jsp页面元素构成 jsp页面组成部分有:指令,注释,静态内容,表达式,小脚本,声明. 1.表达式<%= %> 2.小脚本<% %> 3.声 ...
- 第一次android混淆实战
第一次混淆,主要是因为引用本地第三方jar包的问题.虽然说本地第三方jar包自动避免混淆,但一些本地第三方jar包下的一些包要避免混淆.比如: 文中的com.org 这些包名都要避免混淆. 下面是我用 ...
- MySQL 执行计划中Extra的浅薄理解
1.using where: Extra中出现“Using where”,通常来说,意味着全表扫描或者在查找使用索引的情况下,但是还有查询条件不在索引字段当中. 如果需要回表也是用这个. 2.usin ...
- postgres外部表如何修改源码适配pg升级
postgres中外部表的应用如下: 但是许多在github上的fdw开源代码都是基于9.3以及9.4版本开发,原作者没有随着pg的版本升级而将外部表扩展升级,那只能靠自己去手动修改源码来让这些扩展能 ...
- 图论 Make Unique:有向图和无向图的一些算法
计算机科学入门资料之一的<算法与数据结构-C语言版>,覆盖了基础算法的几乎所有分支,其中的一个典型分支为图理论. 一个简介:图论基础-图数据结构基础 一个简洁的博客:图论基础,简列一本书 ...
- hibernate注解之@Onetomany、@Manytoone、@JoinColumn
@Onetomany用于实体类与数据库表映射中少的一方,请看下面的例子. 假设一个用户只有一种角色,用户和角色是onetomany的关系 用户实体 @Entity @Table(name=" ...
- Django 更新字段
Django在1.7以后的版本提供数据迁移命令,用来在修改模型中的字段,更新到数据库 1. python manager.py makemigrations 命令用来创建迁移文件版本的 2. pyth ...
- 关于在win7旗舰版32位上 安装 net4.0 的闪退问题研究 和安装sqlserver2008问题
1.配置文件客户端[目标x86x64]的 可以安装 2.配置文件完全的目标x86x64的 出现闪退. 3.服务器核心的出现无法安装 安装 sqlserver 2008R2数据库 报错 \最后留下了它, ...