PyQT 跟我学做密码管理器(1)

偏执的太偏执、 2022-04-03 02:58 315阅读 0赞

PyQT 跟我学做密码管理器(1)—— 初始化UI控件

声明:本文借鉴https://blog.csdn.net/bigbennyguo/article/details/50755207 修改而来

前言

学了一段时间的python,一直在黑窗口下面跑代码,别人问我,你学了这么长时间python,能做出个东西让大家都能用吗

我一想,也是啊,写了那么多代码,小工具什么的,除了自己用,在自己的电脑跑一下,好像没啥用了。

于是接触了PyQT,做个大家都能用的东西。

于是有了这个密码管理器

环境

编辑器:Sublime Text3

操作系统:win10

Python3

所需要的库:主要是PyQT5,因为加了一点拓展功能,所以还有sqlite3,Image,pyinstaller

  1. pip3 install pyqt5
  2. pip3 install pyqt5-tools
  3. pip3 install sqilte3
  4. pip3 install Image
  5. pip3 install pyinstaller

首先是pyqt5, 这个是我们的主要工具,用来做界面的,pyqt5-tools这个库主要是是在用QT Creator设计好界面之后,将ui文件转化为py文件;

sqlite3这个库可以安也可以不安,因为pyqt5里面有一个模块QtSql,它支持sqlite的操作;
Image这个库主要是用来处理一下图片资源,以及最后程序的图标的
pyinstaller 最后将程序转化为可执行的exe文件

框架设计

在决定好要做什么东西之后,心里大概给这个成品画一个图,这个程序有什么功能,最后的界面是什么样子的
差不多是下面这个样子

20181220100454837.png

总共有四个功能
1.建立记录,这个记录有四点,描述或者说网站名字,然后用户名,密码,网址
2.修改功能
3.删除功能
4.备份功能

数据存到数据库中或者文件中才不会丢失,但是如果文件在电脑上被删了怎么办,所以这个备份,我选择将其发送到邮箱中。

基本框架

用代码先将UI界面简单的搭建起来

  1. # -*- coding: utf-8 -*-
  2. # @Date : 2018-12-17 16:50:23
  3. # @Author : Jimy_Fengqi (jmps515@163.com)
  4. # @Link : https://blog.csdn.net/qiqiyingse
  5. # @Version : V1.0
  6. # @pyVersion: 3.6
  7. import sys,sqlite3,os
  8. from PyQt5.QtWidgets import *
  9. from PyQt5.QtGui import QIcon, QFont
  10. from PyQt5.QtCore import *
  11. import images
  12. class PasswordManagerSystem(QMainWindow):
  13. def __init__(self):
  14. super(PasswordManagerSystem, self).__init__()
  15. self.initToolbar()
  16. self.initDB()
  17. self.initGrid()
  18. #self.current_row = 0
  19. self.setGeometry(300, 300, 650, 300)
  20. self.setWindowTitle('密码管理器')
  21. self.setWindowIcon(QIcon(':images/logo.jpg'))
  22. def initToolbar(self):
  23. newAction = QAction(QIcon(':images/new.png'), 'New Ctrl+N', self)
  24. editAction = QAction(QIcon(':images/edit.png'), 'Edit Ctrl+E', self)
  25. delAction = QAction(QIcon(':images/del.png'), 'Delete', self)
  26. backupAction = QAction(QIcon(':images/backup.png'), 'Backup Ctrl+B', self)
  27. newAction.setShortcut('Ctrl+N')
  28. editAction.setShortcut('Ctrl+E')
  29. delAction.setShortcut('Delete')
  30. backupAction.setShortcut('Ctrl+B')
  31. newAction.triggered.connect(self.newAction_def)
  32. editAction.triggered.connect(self.editAction_def)
  33. delAction.triggered.connect(self.delAction_def)
  34. backupAction.triggered.connect(self.backupAction_def)
  35. self.tb_new = self.addToolBar('New')
  36. self.tb_edit = self.addToolBar('Edit')
  37. self.tb_del = self.addToolBar('Del')
  38. self.tb_backup = self.addToolBar('Backup')
  39. self.tb_new.addAction(newAction)
  40. self.tb_edit.addAction(editAction)
  41. self.tb_del.addAction(delAction)
  42. self.tb_backup.addAction(backupAction)
  43. def backupAction_def(self):
  44. pass
  45. def initDB(self):
  46. pass
  47. def initGrid(self):
  48. self.grid = QTableWidget()
  49. self.setCentralWidget(self.grid)
  50. self.grid.setColumnCount(4)
  51. self.grid.setRowCount(0)
  52. column_width = [75, 150, 270, 150]
  53. for column in range(4):
  54. self.grid.setColumnWidth(column, column_width[column])
  55. headerlabels = ['Website', 'Username', 'Password', 'Url']
  56. self.grid.setHorizontalHeaderLabels(headerlabels)
  57. self.grid.setEditTriggers(QAbstractItemView.NoEditTriggers)
  58. self.grid.setSelectionBehavior(QAbstractItemView.SelectRows)
  59. def newAction_def(self):
  60. pass
  61. def editAction_def(self):
  62. pass
  63. def delAction_def(self):
  64. pass
  65. def showHint(self):
  66. pass
  67. def showDialog(self, ws = '', un = '', pw = '', url = ''):
  68. pass
  69. if __name__ == '__main__':
  70. app = QApplication(sys.argv)
  71. pwk = PasswordManagerSystem()
  72. pwk.show()
  73. app.exec_()
  74. pwk.conn.close()
  75. sys.exit(0)

首先整个class继承自QmainWindow, 一开始初始化的时候,先加载工具栏(注意我的认知里面只有QMainWindow才有工具栏,希望这句话不会被打脸~),
添加四个工具栏按钮,这四个工具栏按钮这里是使用的图标,关于如何加载图片资源下一节再讲;给每个图标添加提示信息

  1. newAction = QAction(QIcon(':images/new.png'), 'New Ctrl+N', self)#添加图标,当鼠标悬浮到这个按钮的时候,显示提示信息

然后绑定快捷键

  1. newAction.setShortcut('Ctrl+N')#绑定快捷键

绑定触发事件

  1. newAction.triggered.connect(self.newAction_def)#绑定触发事件

添加真正的工具栏,并且取名字

  1. self.tb_new = self.addToolBar('New')

将Action添加关联到工具栏

  1. self.tb_new.addAction(newAction)

工具栏加载完毕,初始化数据库相关的,这一部分随后再说

接着是初始化显示页面

  1. self.initGrid()
  2. def initGrid(self):
  3. self.grid = QTableWidget() #一个tableview
  4. self.setCentralWidget(self.grid)
  5. self.grid.setColumnCount(4) #设置4列
  6. self.grid.setRowCount(0) #设置第一行
  7. column_width = [75, 150, 270, 150] #设置没一列的宽度
  8. for column in range(4):
  9. self.grid.setColumnWidth(column, column_width[column])
  10. headerlabels = ['Website', 'Username', 'Password', 'Url'] #第一行当作表头
  11. self.grid.setHorizontalHeaderLabels(headerlabels) #设置第一行表头
  12. self.grid.setEditTriggers(QAbstractItemView.NoEditTriggers) #设置表格不可编辑
  13. self.grid.setSelectionBehavior(QAbstractItemView.SelectRows) #设置只能一行一行的选择

目前实现之后界面应该是这个样子

20181220104645576.png

发表评论

表情:
评论列表 (有 0 条评论,315人围观)

还没有评论,来说两句吧...

相关阅读