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文件的行数,首先想到的肯定是用递归的方法,因为文件夹下面可能包含文件夹,用递归的方法,代码容易写.(这和写简单 ...
随机推荐
- Codeforces 903G 巧妙的线段树
思路: 巧妙的线段树 想方法将网络流往数据结构方向转化 http://www.cnblogs.com/yyf0309/p/8724558.html //By SiriusRen #include &l ...
- [转]linux uniq 命令详解
转自:http://blog.csdn.net/tianmohust/article/details/6997683 uniq 命令 文字 uniq 是LINUX命令 用途 报告或删除文件中重复的 ...
- [转]android-学习笔记之按钮事件
本文转载自: http://zhangkun716717-126-com.iteye.com/blog/761080 前备知识: 1.需要了解怎么得到界面元素. 那么如何得到界面元素呢?在界面配置文件 ...
- Java系列学习(九)-多态
1.final关键字 (1)最终的意思, 可以修饰类,方法,变量 (2)特点: A:它修饰的类,不能被继承 B:它修饰的方法,不能被重写(覆盖) C:它修饰的变量,这个变量其实是一个常量 [扩展] ① ...
- C#使用Win32函数的一些类型转换
C#在访问Win 32 Api时需要处理C 结构与C#结构的映射,这在MSDN以及许多Blog上都可以找到参考的资料.Win 32 中有一些定义复杂的Struct,这些结构体拥有长度固定的数组或者一些 ...
- which
功能说明:显示命令的全路径. 参数选项: -a 默认在PATH路径中由前往后查找命令,如果查找到了,就停止匹配.使用-a选项将遍历所有PATH路径,输出所有匹配项. 参数-a把所有匹配命令路 ...
- (转) SolrCloud之分布式索引及与Zookeeper的集成
http://blog.csdn.net/ebay/article/details/46549481 作者:Wang, Josh 一.概述 Lucene是一个Java语言编写的利用倒排原理实现的文本检 ...
- python_时间日期
time.time()用于获取当前时间戳 从返回浮点数的时间辍方式向时间元组转换,只要将浮点数传递给如localtime之类的函数. localtime = time.localtime(time.t ...
- HDU_1028_Ignatius and the Princess III_(母函数,dp)
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- post发送数据 mypost input 改变事件
//name=或者 "&name=" + "123" + "&data=" + "slice" (可以获 ...