想让执行完程序后自动关闭窗口,而不用点击右上角叉叉的方法是self.close(),具体应用还是以treewidget为例。

前面我们写了一个treewidget的界面,并且实现了界面代码分离,具体实现不多讲了,直接上代码:

treeview4.py

  1. # -*- coding: utf-8 -*-
  2.  
  3. # Form implementation generated from reading ui file 'treeview4.ui'
  4. #
  5. # Created by: PyQt5 UI code generator 5.13.0
  6. #
  7. # WARNING! All changes made in this file will be lost!
  8.  
  9. from PyQt5 import QtCore, QtGui, QtWidgets
  10.  
  11. class Ui_MainWindow(object):
  12. def setupUi(self, MainWindow):
  13. MainWindow.setObjectName("MainWindow")
  14. MainWindow.resize(800, 600)
  15. self.centralwidget = QtWidgets.QWidget(MainWindow)
  16. self.centralwidget.setObjectName("centralwidget")
  17. self.treeWidget = QtWidgets.QTreeWidget(self.centralwidget)
  18. self.treeWidget.setGeometry(QtCore.QRect(150, 80, 411, 341))
  19. self.treeWidget.setObjectName("treeWidget")
  20. MainWindow.setCentralWidget(self.centralwidget)
  21. self.menubar = QtWidgets.QMenuBar(MainWindow)
  22. self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
  23. self.menubar.setObjectName("menubar")
  24. MainWindow.setMenuBar(self.menubar)
  25. self.statusbar = QtWidgets.QStatusBar(MainWindow)
  26. self.statusbar.setObjectName("statusbar")
  27. MainWindow.setStatusBar(self.statusbar)
  28.  
  29. self.retranslateUi(MainWindow)
  30. QtCore.QMetaObject.connectSlotsByName(MainWindow)
  31.  
  32. def retranslateUi(self, MainWindow):
  33. _translate = QtCore.QCoreApplication.translate
  34. MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
  35. self.treeWidget.headerItem().setText(0, _translate("MainWindow", "Key"))
  36. self.treeWidget.headerItem().setText(1, _translate("MainWindow", "Value"))

treeview4_run.py

  1. from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog
  2. from PyQt5 import QtCore, QtGui, QtWidgets
  3. import treeview4
  4. import treeview_data
  5. import sys
  6. import threading
  7. import time
  8.  
  9. class MainCode(QMainWindow, treeview4.Ui_MainWindow):
  10. list_result_update = QtCore.pyqtSignal([int, int, str])
  11.  
  12. def __init__(self):
  13. QMainWindow.__init__(self)
  14. treeview4.Ui_MainWindow.__init__(self)
  15. self.setupUi(self)
  16. # 设置列宽
  17. self.treeWidget.setColumnWidth(0, 200)
  18.  
  19. _translate = QtCore.QCoreApplication.translate
  20. self.initial_tree_view(_translate)
  21. self.treeWidget.expandAll()
  22. # 用列表触发槽函数
  23. self.list_result_update.connect(self.modified_treewidget)
  24. # 线程函数
  25. self.run()
  26.  
  27. def run(self):
  28. th = threading.Thread(target=self.go_update)
  29. th.setDaemon(True)
  30. th.start()
  31.  
  32. def initial_tree_view(self, _translate):
  33. list_objects = []
  34. test1 = treeview_data.DataCollection()
  35. test1.set_module({"Test1": "waiting"})
  36. test1.add_item({"a1": "waiting"})
  37. test1.add_item({"b1": "waiting"})
  38. test1.add_item({"c1": "waiting"})
  39. list_objects.append(test1)
  40.  
  41. test2 = treeview_data.DataCollection()
  42. test2.set_module({"Test2": "waiting"})
  43. test2.add_item({"a2": "waiting"})
  44. test2.add_item({"b2": "waiting"})
  45. test2.add_item({"c2": "waiting"})
  46. test2.add_item({"d2": "waiting"})
  47. list_objects.append(test2)
  48.  
  49. test3 = treeview_data.DataCollection()
  50. test3.set_module({"Test3": "waiting"})
  51. test3.add_item({"a2": "waiting"})
  52. test3.add_item({"b2": "waiting"})
  53. test3.add_item({"c2": "waiting"})
  54. test3.add_item({"d2": "waiting"})
  55. list_objects.append(test3)
  56.  
  57. for object_num, object_module in enumerate(list_objects):
  58. item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
  59. brush = QtGui.QBrush(QtGui.QColor(176, 165, 172))
  60. brush.setStyle(QtCore.Qt.SolidPattern)
  61. item_0.setBackground(0, brush)
  62. for module_name, module_result in object_module.module.items():
  63. brush = QtGui.QBrush(QtGui.QColor(0, 255, 0))
  64. brush.setStyle(QtCore.Qt.SolidPattern)
  65. item_0.setBackground(1, brush)
  66. self.treeWidget.topLevelItem(object_num).setText(0, _translate("MainWindow", module_name))
  67. self.treeWidget.topLevelItem(object_num).setText(1, _translate("MainWindow", module_result))
  68. for item_num, item_dic in enumerate(object_module.items):
  69. for item_name, item_result in item_dic.items():
  70. item_1 = QtWidgets.QTreeWidgetItem(item_0)
  71. self.treeWidget.topLevelItem(object_num).child(item_num).setText(0, _translate("MainWindow",
  72. item_name))
  73. self.treeWidget.topLevelItem(object_num).child(item_num).setText(1, _translate("MainWindow",
  74. item_result))
  75.  
  76. def modified_treewidget(self, num_one, num_two, str_one):
  77. _translate = QtCore.QCoreApplication.translate
  78. brush = QtGui.QBrush(QtGui.QColor(0, 255, 0))
  79. brush.setStyle(QtCore.Qt.SolidPattern)
  80. self.treeWidget.topLevelItem(num_one).child(num_two).setBackground(1, brush)
  81. self.treeWidget.topLevelItem(num_one).child(num_two).setText(1, _translate(
  82. "MainWindow",
  83. str_one))
  84.  
  85. def go_update(self):
  86. time.sleep(1)
  87. # 更新treeview
  88. self.list_result_update.emit(1, 1, "aaaaaaa")
  89. time.sleep(1)
  90. # 关闭窗口
  91. self.close()
  92.  
  93. if __name__ == "__main__":
  94. app = QApplication(sys.argv)
  95. md = MainCode()
  96. md.show()
  97. app.exec_()
  98. # sys.exit(app.exec_())

具体实现效果就是先初始化树结构,等待一秒后改变其中一个的值, 在等待一秒退出窗口。

效果图:

Python基础之PyQt5关闭界面的更多相关文章

  1. 分析案例:界面提示“基础链接已经关闭:接收时发生错误”----本质为StackOverflow

    问题描述: 一个业务复杂.执行时间很长的功能,经常报出“基础链接已经关闭:接收时发生错误”,很是蹊跷... 问题分析: 首先,查阅应用服务器的系统日志,发现问题发生时总是会伴随着w3wp进程崩溃的错误 ...

  2. Python基础教程(第2版 修订版) pdf

    Python基础教程(第2版 修订版) 目录 D11章快速改造:基础知识11.1安装Python11.1.1Windows11.1.2Linux和UNIX31.1.3苹果机(Macintosh)41. ...

  3. python基础篇(一)

    PYTHON基础篇(一) 变量 赋值 输入,输出和导入 A:输入 B:输出 C:导入 运算符 A:算数运算符 B:比较运算符 C:赋值运算符 D:位运算符 E:逻辑运算符 F:成员运算符 G:身份运算 ...

  4. Python基础教程(第3版)PDF高清完整版免费下载|百度云盘

    百度云盘:Python基础教程(第3版)PDF高清完整版免费下载 提取码:gkiy 内容简介 本书包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基础知识和基 ...

  5. python基础全部知识点整理,超级全(20万字+)

    目录 Python编程语言简介 https://www.cnblogs.com/hany-postq473111315/p/12256134.html Python环境搭建及中文编码 https:// ...

  6. 【详细】Python基础(一)

    @ 目录 前言 1. Python环境的搭建 1.1 python解释器的安装 1.2 pycharm的安装 2. Python基础语法 2.1 基本语法 2.2 数据类型 2.3 标识符与关键字 2 ...

  7. 进击的Python【第三章】:Python基础(三)

    Python基础(三) 本章内容 集合的概念与操作 文件的操作 函数的特点与用法 参数与局部变量 return返回值的概念 递归的基本含义 函数式编程介绍 高阶函数的概念 一.集合的概念与操作 集合( ...

  8. python基础之文件读写

    python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使用os模块的一些方法如下: 得到 ...

  9. Python基础+Pythonweb+Python扩展+Python选修四大专题 超强麦子学院Python35G视频教程

    [保持在百度网盘中的, 可以在观看,嘿嘿 内容有点多,要想下载, 回复后就可以查看下载地址,资源收集不易,请好好珍惜] 下载地址:http://www.fu83.cc/ 感觉文章好,可以小手一抖 -- ...

随机推荐

  1. 我想挑战下我的软肋,动手实现个Spring应用上下文!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 目录 [x] 第 1 章:开篇介绍,我要带你撸 Spring 啦! [x] 第 2 章:小试牛 ...

  2. 【模拟7.14】B. 熟练剖分(tree) (概率DP)

    一道概率神题,考试时没读清题考完看了学长的玄学题解看了好几个小时 首先f[i][j]表示在点 i 为根的子树中,向下最长轻链长度小于等于 j 的概率. 首先递归下去并求出子树大小,然后枚举重儿子,枚举 ...

  3. Docker启动PostgreSQL时创建多个数据库

    1 前言 在文章<Docker启动PostgreSQL并推荐几款连接工具>中我们介绍如何通过Docker来启动PostgreSQL,但只有一个数据库,如果想要创建多个数据库在同一个Dock ...

  4. Pytest学习笔记7-skip和skipif的使用

    前言 在实际的测试中,我们经常会遇到需要跳过某些测试用例的情况,pytest提供了skip和ifskip来跳过测试 下面我们就来通过一些例子看看skip和ifskip具体如何使用吧 skip的用法 使 ...

  5. PUN丨实用API

    原文地址:PUN丨实用API 当前房间人数 int num = PhotonNetwork.CurrentRoom.PlayerCount; 当前脚本是否属于当前玩家 //需继承MonoBehavio ...

  6. hive学习笔记之六:HiveQL基础

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. Zabbix5.0Yum安装

    1.1.操作系统配置: 1.操作系统属性(虚拟机下环境): (1)操作系统版本: [root@localhost ~]# cat /etc/redhat-release CentOS Linux re ...

  8. nginx日志分析及其统计PV、UV、IP

    一.nginx日志结构 nginx中access.log 的日志结构: $remote_addr 客户端地址 211.28.65.253 $remote_user 客户端用户名称 -- $time_l ...

  9. 解决spring boot中文乱码问题

    在开发或学习当中,我们不可避免的会碰到中文乱码的问题(好想哭,但还是要保持微笑!) 今天,在学习spring boot中碰到了中文乱码问题. 首先,看了一下workspace是不是设置utf-8默认字 ...

  10. java.io.CharConversionException: Not an ISO 8859-1 character: [留]

    笔记一下 问题代码如下: response.setContentType("text/html;charset=utf-8");ServletOutputStream out = ...