[题目一]下面是关闭特定程序的代码,其中红色部分为核心代码。

  1. 请在pycharm里面建立一个项目,然后在Form里放置一个按钮控件
  2. 双击按钮控件,在合适的部分加入下面红色的代码
  3. 拓展举例:进一步修改程序,给出一个列表显示正在运行的程序,让用户选择关闭哪个程序。

原题给的代码好像是C#的,因为我是用python的,所有那些代码段我就都删掉了。下面给出我的代码。(因为赶时间完成实验,所以也没有很精细,可以自己去改一下)

1.UI页面设计(使用pyqt5)

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'ui_1.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(664, 516)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.widget = QtWidgets.QWidget(self.centralwidget)self.widget.setGeometry(QtCore.QRect(62, 22, 531, 411))self.widget.setObjectName("widget")self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)self.verticalLayout.setContentsMargins(0, 0, 0, 0)self.verticalLayout.setObjectName("verticalLayout")self.horizontalLayout = QtWidgets.QHBoxLayout()self.horizontalLayout.setObjectName("horizontalLayout")self.listView = QtWidgets.QListView(self.widget)self.listView.setObjectName("listView")self.horizontalLayout.addWidget(self.listView)self.listView_2 = QtWidgets.QListView(self.widget)self.listView_2.setObjectName("listView_2")self.horizontalLayout.addWidget(self.listView_2)self.verticalLayout.addLayout(self.horizontalLayout)self.splitter = QtWidgets.QSplitter(self.widget)self.splitter.setOrientation(QtCore.Qt.Horizontal)self.splitter.setObjectName("splitter")self.pushButton_2 = QtWidgets.QPushButton(self.splitter)self.pushButton_2.setObjectName("pushButton_2")self.pushButton = QtWidgets.QPushButton(self.splitter)self.pushButton.setObjectName("pushButton")self.verticalLayout.addWidget(self.splitter)MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 664, 22))self.menubar.setObjectName("menubar")MainWindow.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.pushButton_2.setText(_translate("MainWindow", "查看进程"))self.pushButton.setText(_translate("MainWindow", "结束进程"))

这里使用的Qt Designer设计的UI,目前用到的组件并不多,所以这种图形化界面对我完全够用了。这里设计的还有有些问题,因为之前考虑美观,所以用了两个listView,但是这两个listView没有关联起来,也就是下拉页面的时候,另一个不会动,这里我没有搞,但是也挺简单的,放上别人的博客:(5条消息) 两个listview中关联同步滚动条——pyqt5_Sk_stream的博客-CSDN博客

UI页面:

2.主函数部分

导入相关库

import sys
from ui_1 import Ui_MainWindow
from PyQt5.QtCore import QStringListModel
from PyQt5.QtWidgets import QApplication, QMainWindow,QMessageBox
import os
import psutil

这里导入了psutil这个库,因为下面要把当前运行的进程放到listview中,所以导入了相关的库。

class Exp_1(QMainWindow, Ui_MainWindow):def __init__(self, parent=None):super(Exp_1, self).__init__(parent)self.setupUi(self)self.list_name = ['进程名']self.list_pid = ['pid']self.pid = 0self.name = ''self.connecter()self.listview_name = self.listViewself.listview_pid = self.listView_2'''用来设置View所关联的Model,可以使用Python原生的list作为数据源Model'''self.listmodel_name = QStringListModel()self.listmodel_pid = QStringListModel()

初始化函数,我们定义的这个类Exp_1继承了QMainWindow和 Ui_MainWindow两个类,python允许一对多继承,而Java不允许。

我们可以看到我们定义了一个connecter()函数,这个函数是用来连接按钮的。

    def connecter(self):'''按键触发'''self.pushButton_2.clicked.connect(self.process)self.pushButton.clicked.connect(self.kill)def process(self):self.listview_name.clearSelection()'''打印进程名和pid到listview中'''for proc in psutil.process_iter():try:if(proc.as_dict(attrs=['name'])['name'] == ''):continueself.list_name.append(proc.as_dict(attrs=['name'])['name'])self.list_pid.append(str(proc.as_dict(attrs=['pid'])['pid']))except psutil.NoSuchProcess:passself.listmodel_name.setStringList(self.list_name)self.listmodel_pid.setStringList(self.list_pid)self.listview_name.setModel(self.listmodel_name)self.listview_pid.setModel(self.listmodel_pid)'''鼠标点击获取进程信息,并选中进程,然后弹出消息框提示'''self.listview_name.clicked.connect(self.onClickedListView)self.listview_pid.clicked.connect(self.onClickedListView)def onClickedListView(self,item):self.pid=self.list_pid[item.row()]self.name = self.list_name[item.row()]QMessageBox.information(self,"QListView","您选择了:" + self.list_pid[item.row()])def kill(self):'''执行taskkill命令'''os.system(f'taskkill /f /pid {self.pid}')QMessageBox.information(self, "QListView", "您杀死了:" + self.name+"("+self.pid+")"+"进程")self.list_name = ['进程名']self.list_pid = ['pid']self.process()

从上面的代码可以看出来,我们UI界面的两个按钮分别绑定了一个函数,一个是查看当前进程,一个是杀死选中进程。

查看进程中还重写了鼠标点击事件,将选择的进程号PID放到一个全局变量中,方便杀死进程的时候调用该全局变量。

os.system(f'taskkill /f /pid {self.pid}')

这一句的意思就是系统执行taskkill命令。执行格式如下:

TASKKILL [/S system [/U username [/P [password]]]]

{ [/FI filter] [/PID processid | /IM imagename] } [/F] [/T]

其中/F 代表指定要强行终止的进程     /PID process id 代表指定要终止的进程的PID,这里我们就用的这两个参数。

描述:一个或多个任务或进程结束。 可以按进程 ID 或映像名(Image)结束进程。

主函数

if __name__ == "__main__":app = QApplication(sys.argv)w = Exp_1()w.show()sys.exit(app.exec_())

这里就是把上面写的类显示出来。

下面是完整代码:

#-*-coding:gb2312-*-
import sys
from ui_1 import Ui_MainWindow
from PyQt5.QtCore import QStringListModel
from PyQt5.QtWidgets import QApplication, QMainWindow,QMessageBox
import os
import psutilclass Exp_1(QMainWindow, Ui_MainWindow):def __init__(self, parent=None):super(Exp_1, self).__init__(parent)self.setupUi(self)self.list_name = ['进程名']self.list_pid = ['pid']self.pid = 0self.name = ''self.connecter()self.listview_name = self.listViewself.listview_pid = self.listView_2'''用来设置View所关联的Model,可以使用Python原生的list作为数据源Model'''self.listmodel_name = QStringListModel()self.listmodel_pid = QStringListModel()def connecter(self):'''按键触发'''self.pushButton_2.clicked.connect(self.process)self.pushButton.clicked.connect(self.kill)def process(self):self.listview_name.clearSelection()'''打印进程名和pid到listview中'''for proc in psutil.process_iter():try:if(proc.as_dict(attrs=['name'])['name'] == ''):continueself.list_name.append(proc.as_dict(attrs=['name'])['name'])self.list_pid.append(str(proc.as_dict(attrs=['pid'])['pid']))except psutil.NoSuchProcess:passself.listmodel_name.setStringList(self.list_name)self.listmodel_pid.setStringList(self.list_pid)self.listview_name.setModel(self.listmodel_name)self.listview_pid.setModel(self.listmodel_pid)'''鼠标点击获取进程信息,并选中进程,然后弹出消息框提示'''self.listview_name.clicked.connect(self.onClickedListView)self.listview_pid.clicked.connect(self.onClickedListView)def onClickedListView(self,item):self.pid=self.list_pid[item.row()]self.name = self.list_name[item.row()]QMessageBox.information(self,"QListView","您选择了:" + self.list_pid[item.row()])def kill(self):'''执行taskkill命令'''os.system(f'taskkill /f /pid {self.pid}')QMessageBox.information(self, "QListView", "您杀死了:" + self.name+"("+self.pid+")"+"进程")self.list_name = ['进程名']self.list_pid = ['pid']self.process()if __name__ == "__main__":app = QApplication(sys.argv)w = Exp_1()w.show()sys.exit(app.exec_())

宁波大学 软件技术exp_2_1 (1)相关推荐

  1. LSGO软件技术团队招新 线下组队学习

    团队招新 LSGO软件技术团队(Dreamtech算法组)成立于2010年09月,团队主要从事地理信息系统.管理信息系统.计算机视觉等领域的应用开发,团队同时具有培养学生的重要职能,毕业学生分布在IB ...

  2. LSGO软件技术团队招新

    团队招新 LSGO软件技术团队(Dreamtech算法组)成立于2010年09月,团队主要从事地理信息系统.管理信息系统.计算机视觉等领域的应用开发,团队同时具有培养学生的重要职能,毕业学生分布在IB ...

  3. 如何加入LSGO软件技术团队?

    背景 马上就要放暑假了! LSGO软件技术团队 也要开始招新了! 本次招入的同学,我会亲自来带,和你一起学习,共同成长. 我们的主要研究方向是机器学习,再详细一些就是视觉.自然语言处理和量化金融. 以 ...

  4. 软件技术基础_软件技术(游戏软件开发)专业介绍

    软件技术(游戏软件开发)专业 核心课程 C++程序设计.Java程序设计.C#程序设计.Cocos2d-x游戏开发.Unity3D游戏开发.Android游戏开发.IOS游戏开发.游戏框架设计.游戏服 ...

  5. “地理智慧 链接未来”,2020 GIS 软件技术大会主题大会召开

    ​ 9月9日下午,以"地理智慧 链接未来"为主题的2020 GIS 软件技术大会(简称GTC 2020)主题大会在北京国际会议中心举办.同日,上海.广州.成都.武汉.西安五大分布式 ...

  6. 为什么大型科技公司更会发生人员流失 标准 ceo 软件 技术 图 阅读2479 原文:Why Good People Leave Large Tech Companies 作者:steve

    为什么大型科技公司更会发生人员流失 标准 ceo 软件 技术 图 阅读2479  原文:Why Good People Leave Large Tech Companies  作者:steve bla ...

  7. 宁波大学2013 计算机应用基础 高级c语言程序 练习册答案,2020年宁波大学计算机应用技术考研真题试卷及试题答案,计算机系统基础考研试题下载...

    更多考研真题样张如下, 说明:本站提供的宁波大学计算机应用技术考研真题来源于宁波大学研究生院,除标注有"回忆版"字样的试题外,其余均为原版扫描,权威可靠:回忆版试题由当年参加硕士研 ...

  8. 相对于oracle数据库的作用 类似于,郑州大学软件技术学院Oracle试卷

    郑州大学软件技术学院Oracle 2009-2010期末试题 (适用专业:08信管.Java..NET专业 考试时间:120分钟) 单选:1 Oracle 10g中的g表示( A ). A 网络 B ...

  9. 2012 IBM软件技术峰会:IBM与开发者谈四大热门领域看法

    8月23日,以"技术维新,预见未来"为主题的2012 IBM软件技术峰会在京举行,本次大会在"大数据.云计算.敏捷.移动"四个领域展开讨论,IBM全球副总裁兼中 ...

最新文章

  1. 干货!神经网络原来是这样和数学挂钩的
  2. 算法与数据结构(2)
  3. Think in Java读书笔记--隐藏实施过程
  4. java整合html_springBoot整合mybatis、jsp 或 HTML
  5. 【Pytorch神经网络理论篇】 17 循环神经网络结构:概述+BP算法+BPTT算法
  6. 数据库MySQL驱动5.1.22下载_mysql-connector-java-5.1.22下载
  7. python df共有几行_从zero到hero,一款Python自然语言处理效率利器!
  8. Python Tricks(六)—— 删除一个可迭代序列中等于某值的全部元素
  9. 软件需求模式阅读笔记之一
  10. ENVI5.2裁剪遥感图像指定区域
  11. 儒豹公布09年7月手机搜索热门关键词排行榜
  12. 教育培训机构如何利用小程序招生?
  13. Datawhale组队学习周报(第026周)
  14. ArcGIS点集之间两两连线
  15. 完整的渗透测试实战纪实,低危漏洞组合成高危利用!
  16. 刨根问底 HTTP 和 WebSocket 协议(上)
  17. Linux文件系统 devfs/udev/sysfs简述
  18. JavaEE开发必备词汇
  19. Mac设置固定IP地址
  20. 基于javaCar易达租车系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

热门文章

  1. seamless clone
  2. java学习之LinkedList(链表)
  3. mini2440 led驱动程序测试实验
  4. 在北京西单图书大厦签名售书
  5. 共模电感(扼流圈) 差模电感(扼流圈)
  6. 从0到N建立高性价比的大数据平台
  7. 线性代数笔记21——伴随矩阵和克莱姆法则
  8. 计算机系统盘涨满怎么办,C盘莫名其妙满了 ,教你5种方法解决!
  9. 实现css文字垂直居中的8种方法
  10. 网页抓包工具httpwatch