XIAOYE的博客

就算是失败,也要知道自己的极限在哪

使用 Python 和 PyQt 构建批量文件重命名工具-项目学习(原文链接

目录

  • 演示demo
  • 项目布局
  • 主要步骤
    • 步骤1:构建GUI
    • 步骤2:创建PyQt骨架应用程序
    • 步骤3:使用pathlib PyQt 线程重命名文件
    • 步骤4:根据重命名进度更新GUI状态
  • 总结

demo演示

demo

项目布局

files

rprename_project/是项目的根目录,在其中创建以下文件:

    1. README.md
    2. requirements.txt 提供项目的外部依赖项列表
    3. rprenamer.py 提供一个入口脚本运行应用程序

rprename/目录将包含一个包含以下模块的Python包:

    1. __init__.py 将rprename/作为Python包启动
    2. app.py 提供PyQt骨架应用程序
    3. rename.py 提供程序重命名功能
    4. view.py 提供应用程序的GUI和Qt相关槽函数实现

ui/子目录包含所有GUI文件:

    1. __init__.py 表明这是一个包
    2. window.ui 程序ui框架 在QT Designer 中设计后生成
    3. window.py 可以由window.ui经pyuic5工具直接生成

主要步骤

  1. 使用QTDesigner构建GUI界面
    files
    详情见原文视频

  2. 创建pyQT骨架应用

    1. rprename/init.py 添加
    1
    2
    3
    4
    5
    6
    # -*- coding: utf-8 -*- 
    # rprename/__init__.py

    """This module provides the rprename package."""

    __version__ = "0.1.0" #描述应用版本信息
    1. rprename/views.py添加
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # -*- coding: utf-8 -*-
    # rprename/views.py

    """This module provides the RP Renamer main window."""

    from PyQt5.QtWidgets import QWidget #最开始的 qtDesigner 用的时widget类

    from .ui.window import Ui_Form #将ui文件作为包导入

    class Window(QWidget, Ui_Form):#创建了一个Window 类 继承自 QWidget和Ui_Form
    #类的构建函数
    def __init__(self):
    #super()调用父类的构造
    super().__init__()
    self._setupUI()

    def _setupUI(self):
    self.setupUi(self)

    1. rprename/app.py添加
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    # -*- coding: utf-8 -*-
    # rprename/app.py

    """This module provides the RP Renamer application."""

    import sys

    from PyQt5.QtWidgets import QApplication

    from .views import Window

    # 将main()定义为应用程序的主函数
    def main():
    # Create the application
    # 创建QApplication类的实例app
    app = QApplication(sys.argv)
    # Create and show the main window
    # Window 是导入的views中的对象 创建Window类的实例Win
    win = Window()
    win.show()
    # Run the event loop
    # 使用了sys模块中exit()方法
    sys.exit(app.exec())
    1. rprenamer.py 添加(name==”main“详解)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # rprenamer.py

    """This module provides the RP Renamer entry-point script."""

    from rprename.app import main

    if __name__ == "__main__":
    main()
  3. 使用Pathlib和PyQt thread 批量重命名文件

    1. rprename/views.py更新
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    # -*- coding: utf-8 -*-
    # rprename/views.py

    """This module provides the RP Renamer main window."""

    from PyQt5.QtWidgets import QWidget # 最开始的 qtDesigner 用的时widget类
    from PyQt5.QtWidgets import QFileDialog #Loadfile按钮用到的QT类
    from collections import deque # collection 提供了格外的python数据结构 导入双端队列进行操作更简单
    from .ui.window import Ui_Form #将ui文件作为包导入
    from pathlib import Path # python的文件处理包 主要用到Path.rename()来重命名文件

    # 过滤器常量
    FILTERS = ";;".join(
    (
    "PNG Files (*.png)",
    "JPEG Files (*.jpeg)",
    "JPG Files (*.jpg)",
    "GIF Files (*.gif)",
    "Text Files (*.txt)",
    "Python Files (*.py)",
    )
    )
    class Window(QWidget, Ui_Form):#创建了一个Window 类 继承自 QWidget和Ui_Form
    #类的构建函数
    def __init__(self):
    #super()调用父类的构造
    super().__init__()
    # 创建一个deque对象 _files
    self._files = deque()
    # 创建_filesCount存储文件数量
    self._filesCount = len(self._files)

    self._setupUI()

    def _setupUI(self):
    self.setupUi(self)

    #QT 槽函数 调用下一个LoadFiles()函数
    def _connectSignalsSlots(self):
    self.loadFilesButton.clicked.connect(self.loadFiles)

    def loadFiles(self):
    # 点击LoadFiles按钮 右侧列表清空
    self.dstFileList.clear()
    # 检测当前行编辑框 是否为空
    if self.dirEdit.text():# 不为空,则initDir初始化为当前目录
    initDir = self.dirEdit.text()
    else:# 初始目录被设置为path .home(),它返回当前用户主文件夹的路径
    initDir = str(Path.home())

    # QFileDialog. getopenfilename ()这个静态方法接受几个参数,创建一个允许用户选择一个或多个文件的对话框,并返回一个基于字符串的所选文件路径列表。它还返回当前使用的文件过滤器。
    # (parent,caption,dir,filter)其中parent设置父亲 caption设置显示字符串 dir设置路径 filter设置文件过滤
    files, filter = QFileDialog.getOpenFileNames(
    self, "Choose Files to Rename", initDir, filter=FILTERS
    )

    # 有文件被选择
    if len(files) > 0:
    # 切片当前过滤器字符串以提取文件扩展名。
    fileExtension = filter[filter.index("*") : -1]
    # 将. extensionlabel对象的文本设置为上一行提取的文件扩展名。
    self.extensionLabel.setText(fileExtension)
    # 将列表中第一个元素的上级目录 作为源目录
    srcDirName = str(Path(files[0]).parent)
    # 将. diredit行编辑的文本设置为上一行获得的目录路径。
    self.dirEdit.setText(srcDirName)
    # 为每个文件创建一个Path对象,并将其附加到._files 同时在左侧界面显示
    for file in files:
    self._files.append(Path(file))
    self.srcFileList.addItem(file)
    self._filesCount = len(self._files)
    # python 不区分私有或共有属性

    完成了 Loadfile按钮的参函数定义和实现 同时 对载入文件进行加载

气功热,下岗潮,股市神话 改革开放后的二十年中国是如何发展的?

前言

改革开放是中国乃至世界的奇迹,站在当前这个时代,我们可以确定无疑的说,邓公做的这个决策对中国的影响是巨大的,正是改革开放,中国的经济开始了飞速发展,直到现在,中国从建国初老百姓吃不饱饭,国家不知道社会主义路往何处走到现在中国化时代化的社会主义理念深入人心,经济建设一日千里,中国已然成为世界上最富强的国家之一

网上对改革开放的评价大多基于时代和国家等宏观层面,对于我们大学生来说可能有些太远,我们组选题更贴合自身兴趣,让我们从接下来的三个方面来看改革开放初的二十年,中国野蛮生长的年代有何魅力,视频中如有不足之处,还请老师批评指正

从气功热看,这个在当前时代看来的荒诞闹剧在当时是否有科学道理可言?

创始期(1979—1987年)

气功热的起点事件是1978年11月,四川发现了儿童能用耳朵认字。1979年3月11日,《四川日报》报道大足县小学生唐雨“耳朵识字”事件。四川省委书记领导四川省科委调查研究此特异现象,并发表文章引起了全国关注,就此拉开特异现象研究的序幕。很快地,以上海复旦大学、上海海洋学院为首的全国数十家高校参与了相关研究,各地陆续发现了一大批有特异能力的人,中国权威的科学类杂志上海《自然》做了系列报道,主编朱润龙将此特异现象正式定名为“特异功能”,1979年成为中国人体科学“元年”。

1980年6月,钱学森在上海提出“人体科学”的概念,并鼓励科学家开展相关研究。

之后数年,复旦大学副校长方林虎和北京大学教授陈守良提出特异功能具有普遍性,设计了各种科学实验,证明特异功能的存在性。

成长期(1987—1995年)

这期间,中国科学家在许多大学如北京大学、清华大学、复旦大学、上海交大、武汉大学、云南大学、地质大学做了大量人体科学实验,充分证明了“存在性”,总结出特异功能的许多规律。

1992年6月民政部给予人体科学学会正式登记,“中国人体科学学会”成为民政部登记注册的一级学术社团,这是中国人体科学发展史上的里程碑。

挫折期(1995——1999)

这期间许多留美归国的科学家集结质疑人体科学研究,科学界反人体科学、反特异功能、反气功的声音越来越多,一些学者把人体科学视为“伪科学”而予以打击。

1995年,气功大师张宝胜在北京电视台餐厅表演抖药片时失败,从此销声匿迹。这一期间,已经有包括《工人日报》等公开批判“实为魔术”的人体特异功能表演。1996年,宋孔智于《中华气功》上发表了《张宝胜的特异功能研究》。1999年,众所周知的法伦功事件后,“人体科学”研究热彻底破产。2000年,《中国人体科学》、《气功》等—系列杂志停刊。同年,中国反邪教协会正式成立。气功热在党中央和各界打击下销声匿迹。

思考

站在当今的时代背景下,我们可能很难理解为何明显不靠谱甚至荒谬的“气功热”能够大行其道这么长时间,但结合当时的时代背景,在那个时代,除了像妇联、工会之外的在国家控制下的大众组织,国家支持的官方气功研究会几乎是唯一合法的大众组织。同时,在社会变迁的过程中,气功运动也扮演了一个关键角色,在人们为了练习气功而集结起来时,无形中促进了不同社会背景、阶层和地区的人之间的联系。 而且气功热中的这些组织,还有他们宣传的社会愿景,最常见的是促进大众健康,此外还有促进传统中华文明的复兴,以及开创一次由中国领导的科技革命,以将人类带入全新的乌托邦等等。

另一方面,文革结束后,伟人政治消亡,人民需要各式各样的替代品填补内心,充实生活,否则会陷入无意义的虚空。这种对虚空的恐惧驱使着老百姓们从政治狂热立刻转向气功狂热。这就给了有心人士可乘之机。

在八十年代,气功和人体科学成了一项社会刚需,很自然的,成为一个气功大师便成为当时跨越阶层、获得声名、乃至攀龙附凤的最快速手段。这期间,出现了众多所谓“气功大师”,他们无一例外在经历了几年的辉煌后轰然倒塌

到20世纪末,国家层面出台相关法律文件等措施才最终扼杀了这场轰轰烈烈的气功热

下岗潮,从《杀死那个石家庄人》谈谈下岗潮给北方人民带来的影响以及对现在我们的启示

《杀死那个石家庄人》并不是一个和那个年代的文艺气息很符合的名字,但它讲述的故事却是那个年代无数家庭的缩影

这首歌描写的是二十世纪八九十年代,面对下岗潮后个人命运的扑朔迷离,城市的衰败没落,时代的迷茫模糊,一个石家庄家庭的痛苦和挣扎。它通过对那个特定时间,特定地点的虚构家庭的刻画,精准揭示了那个年代下岗工人的敏感无措的内心

《杀死那个石家庄人》描述了北方重工业城市在经历过了时代变迁,从计划经济到市场经济的的变轨所经历的阵痛,和那些被遗忘或者是被抛弃的群体的失落和愤怒的感受。资源丰富和经济繁荣的城市已经荣光不再,而沿海的贸易投机者们取代了踏实的劳动者成为了时代的新宠儿。80年代出生的人亲身经历了从繁荣转向衰弱的历程,他们所受的教育是单纯的理想和浪漫主义,而满眼所见的,全都是金钱至上和欲望崇拜。 “生于理想,死于欲望”是这一代人最良好的写照,《杀死那个石家庄人》实际上就是对这种状态的一种描述。

在国企下岗潮后,全国各地的国企改制仍在继续进行。曾经的那个厂房大院早已凋零,尤其在华北、东北一带的国企大院早已废弃,犹如美国五大湖的铁锈带一般,失去了原有的色彩,只留下一片狼藉与荒芜。过去的居民早已离开。曾经那个繁华的城市也因为重工业的衰弱而凋亡,年轻人纷纷离开衰败的城市,踏上了遥远他乡的路途。

多重因素下,国企的所有制性质迅速改革,一部分混合所有,一部分成为私人企业。在这场规模和时长都浩大的改革中,一个个“被杀死的石家庄人”成为了私有化浪潮的牺牲品与转型发展中的代价。

“如此生活三十年,直到大厦崩塌”这才是杀死石家庄人的东西。

一首歌曲后面映射的的却是一代人的生活,时隔接近20年,当年的下岗工人的生活也逐渐归于平静,与此相关的犯罪分子也大部分回归生活,改过自新。一切似乎都过去了而又没有过去。随着近年来新一轮国企改革的启动,国企裁员不得不发生,如2016年,武钢集团最终裁员三万人,被宝钢合并。在东北、河北河南,也有不少国企陆续开始裁员。虽然裁员不可避免,但只要能够做好补偿机制,建立健全社会保险制度,做好心理抚慰工作,引导再就业,当年的悲剧一定不会在今天再次发生。

中国入世的短短3年时间内, 3900万人次完成了就业和再就业, 懂技术的, 有门路的, 脑子灵活的人, 抓住了时代红利, 搭上了新世纪中国经济腾飞的快车,翻开历史书,我们都同情被满清奴役的劳苦大众,但是当一国的问题下降到每个家庭,我们才会发现,如果长期在封闭的环境中禁锢思想,没有敢于闯荡变革的勇气,我们都将被时代淘汰

股市神话,当一个人被称为“神话”,他在股市能有多大的号召力?从杨怀定的发家史 看中国股市的发展

杨百万真名杨怀定,出生于 1950 年,初中文化,曾在上海铁合金厂当仓库保管员。杨怀定脑子活络,为了多挣钱,他和老婆业余在外搞兼职,在人均工资仅几十块的年代,他家已经有两万多元存款。但是在当时的环境,做副业是不被允许的,因此他不敢声张。很快,仓库发生一起盗窃事件。库里丢失一吨铜,杨怀定被认定为嫌疑人。工厂、公安局联合向他施压,最绝望的时候,他向妻子交代:如果自己发生意外,一定要把孩子拉扯大。

将近2周的严酷审查之后,真相大明,真正的小偷被绳之以法,但杨怀定却没有等到领导的一句道歉和安慰。 领导反而告诫他:“组织对你审查,是对你负责。”

杨怀定意难平。

释放当天,他的一篇经济小论文还在报纸上发表,他想不通,自己只想简简单单做个好工人,勤勤恳恳工作,却因为赚到的钱,始终被怀疑为坏人。

悲愤难平,他流着泪写下辞职报告。

他提出一个在当时极为新颖的观点: 与传统陈腐观念抗争,进行自我设计,体现自我价值,自谋职业,自己养活自己。

在那个视“铁饭碗”为生命的时代,他痛苦不已,却又无可奈何。

但以此为开端,杨怀定从倒卖国库券开始,传奇的一生拉开序幕。

1988年,杨怀定从报纸上看到国家放开国库券交易的消息,意识到商机,将所有的存款用来国库券倒卖,赚到了第一桶金

但杨怀定真正发财,还是从股票开始,1988年,国家的宏观经济治理整顿已经取得成效,而市场上的不少生产资料、消费资料卖不出去,出现了不少工厂停工,工人拿70%工资在家下岗,市场疲软的情况–这意味着社会上流通的货币太少了–国家决定再资进行宏观调控:降低银行利率,刺激人民消费和投资欲望。杨怀定又从中抓住机会,大量购入股票,在1992年的熊市到来之前全部抛售,之后几次敏锐抓住机会,不贪,让自己的财富翻了几番

作为中国证券市场的最早参与者,实践者和见证者,杨百万在证券市场拥有许多“第一”:第一个从事大宗国库券异地交易的个人,第一个到中国人民银行咨询证券的个人,第一个个人从保安公司聘请保镖,第一个主动到税务部门咨询交税政策,第一个聘请私人律师,第一个与证券公司对簿公堂,也是第一个作为个人投资者被大学聘为教授。1998年,杨怀定被中央电视台评为“中国改革开放二十年风云人物”。

股票,贯穿他的一生,也造就了中国股市个人投资史上的一段佳话。

纵观杨怀定的投资生涯,我国资本市场投资者的优良品质在他身上得以充分体现。“杨百万”是个普通人,也是全国数亿股民的其中之一。他的可贵之处在于坚持散户定位,为引导资本市场发展站岗放哨。“杨百万”也是我国散户的缩影,他代表着散户群体正在成长为职业化、专业化和理性的投资者。“杨百万“也代表了中国第一批股市投资人用资本增值致富的先锋典范。

他30余年坚定不移的投资生涯,也是无数在经济发展大潮中打拼的普通人的真实写照,更映射了中国资本市场从诞生到壮大的全过程。中国股市再无“杨百万”,但市场上仍将流传着他的传说。

也许歌颂一个投资者,与我们接受的教育不符,但是杨百万以他一人之力极大地推动了国家在改革开放后经济探索时期所作出的各种政策的落地实行,从刚放开国库券交易到上海第一家证券交易所成立,那个草莽年代的法律一步步完善,国家的经济体系也一步步完善。杨百万是第一个吃螃蟹的人,也是有能力从中全身而退的人,如果这样的经历在我们看来依然只是投机主义投机倒把的话,那教育的意义在哪里

总结

限于视频长度,八九十年代的很多东西没有提到,很多描述也不够准确,不够详尽,改革开放后的20年,是一段很值得拿来说道的峥嵘岁月,这二十年,有诗歌,有摇滚,有经济的飞速发展,有体制的不断完善,有过歧路,有过挫折,有过人民的狂热,有过失败者的绝望,小时候总觉得有些事情距离自己太远,国家政策太过宏大,没有切身感受,然而直到今天,站在当前时代的角度,我们真正去感受那个年代的发展,可能可以从中窥到一些时代洪流下,个人命运的沉浮。

八九十年代的经济主义发展不仅促进了中国的经济增长,而且深刻地改变了中国社会的结构和发展路径。这一时期的发展模式既带来了巨大的成就,也暴露出了一些问题和挑战,这些经验和教训对今天的中国仍然具有重要的启示意义。历史和现实证明,中国经济从来都是在风雨中成长、在砥砺中前行,风高浪急的外部压力,必将激发中国经济转型发展的强劲动能。只要我们发挥自身优势,正视困难问题,着力深化改革开放,中国必将不断创造新的经济发展奇迹,中华民族必将以不可阻挡的步伐迈向伟大复兴。

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

0%