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文件的行数,首先想到的肯定是用递归的方法,因为文件夹下面可能包含文件夹,用递归的方法,代码容易写.(这和写简单 ...
随机推荐
- PHP 在线 编辑 解析
http://www.w3schools.com/php/default.asp http://www.w3schools.com/php/showphp.asp?filename=demo_s ...
- java 任意时间转换日期类型
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); try { Date dd=sdf.parse("201 ...
- Android基础TOP2:单机按钮改变字体颜色
---恢复内容开始--- Activity: <TextView android:id="@+id/t1" android:textSize="30dp" ...
- 搜索条件两个时间,通过php数组排序,保证select语句between时间 前小后大
//搜索条件两个时间,通过数组排序,保证select语句between时间 前小后大 $sort_array=[$_POST['clockDate1'],$_POST['clockDate2']]; ...
- ARM处理器的寄存器,ARM与Thumb状态,7中运行模式
** ARM处理器的寄存器,ARM与Thumb状态,7中运行模式 分类: 嵌入式 ARM处理器工作模式一共有 7 种 : USR 模式 正常用户模式,程序正常执行模式 FIQ模式(Fast ...
- 11-c++虚拟函数
虚拟函数 #include "stdio.h" class A{ public: void print() { printf("%s","this i ...
- Zabbix 客户端安装教程(第二篇)
Zabbix 客户端安装教程 blog地址:http://www.cnblogs.com/caoguo [root@localhost ~]# yum install -y gcc make [roo ...
- Ubuntu无线转有线教程
本来想测试一下有线转无线的,奈何网卡不支持,所以就测试了一回无线转有线的测试!(真无聊,不过也算学习一下linux网桥的知识) ca0gu0@ub:~$ sudo brctl addbr br0 #添 ...
- iOS错误报告中关于崩溃地址的分析
http://blog.csdn.net/gaoyp/article/details/46912753 一.错误报告中的三种地址:stack addressload addresssymbol add ...
- iDRAC RAC0218 最大会话限制
用ssh工具登陆IDRAC远程管理ip地址: /admin1-> racadm racreset RAC reset operation initated successfully. It m ...