PyQT 跟我学做密码管理器(1)
PyQT 跟我学做密码管理器(1)—— 初始化UI控件
声明:本文借鉴https://blog.csdn.net/bigbennyguo/article/details/50755207 修改而来
前言
学了一段时间的python,一直在黑窗口下面跑代码,别人问我,你学了这么长时间python,能做出个东西让大家都能用吗
我一想,也是啊,写了那么多代码,小工具什么的,除了自己用,在自己的电脑跑一下,好像没啥用了。
于是接触了PyQT,做个大家都能用的东西。
于是有了这个密码管理器
环境
编辑器:Sublime Text3
操作系统:win10
Python3
所需要的库:主要是PyQT5,因为加了一点拓展功能,所以还有sqlite3,Image,pyinstaller
pip3 install pyqt5
pip3 install pyqt5-tools
pip3 install sqilte3
pip3 install Image
pip3 install pyinstaller
首先是pyqt5, 这个是我们的主要工具,用来做界面的,pyqt5-tools这个库主要是是在用QT Creator设计好界面之后,将ui文件转化为py文件;
sqlite3这个库可以安也可以不安,因为pyqt5里面有一个模块QtSql,它支持sqlite的操作;
Image这个库主要是用来处理一下图片资源,以及最后程序的图标的
pyinstaller 最后将程序转化为可执行的exe文件
框架设计
在决定好要做什么东西之后,心里大概给这个成品画一个图,这个程序有什么功能,最后的界面是什么样子的
差不多是下面这个样子
总共有四个功能
1.建立记录,这个记录有四点,描述或者说网站名字,然后用户名,密码,网址
2.修改功能
3.删除功能
4.备份功能
数据存到数据库中或者文件中才不会丢失,但是如果文件在电脑上被删了怎么办,所以这个备份,我选择将其发送到邮箱中。
基本框架
用代码先将UI界面简单的搭建起来
# -*- coding: utf-8 -*-
# @Date : 2018-12-17 16:50:23
# @Author : Jimy_Fengqi (jmps515@163.com)
# @Link : https://blog.csdn.net/qiqiyingse
# @Version : V1.0
# @pyVersion: 3.6
import sys,sqlite3,os
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon, QFont
from PyQt5.QtCore import *
import images
class PasswordManagerSystem(QMainWindow):
def __init__(self):
super(PasswordManagerSystem, self).__init__()
self.initToolbar()
self.initDB()
self.initGrid()
#self.current_row = 0
self.setGeometry(300, 300, 650, 300)
self.setWindowTitle('密码管理器')
self.setWindowIcon(QIcon(':images/logo.jpg'))
def initToolbar(self):
newAction = QAction(QIcon(':images/new.png'), 'New Ctrl+N', self)
editAction = QAction(QIcon(':images/edit.png'), 'Edit Ctrl+E', self)
delAction = QAction(QIcon(':images/del.png'), 'Delete', self)
backupAction = QAction(QIcon(':images/backup.png'), 'Backup Ctrl+B', self)
newAction.setShortcut('Ctrl+N')
editAction.setShortcut('Ctrl+E')
delAction.setShortcut('Delete')
backupAction.setShortcut('Ctrl+B')
newAction.triggered.connect(self.newAction_def)
editAction.triggered.connect(self.editAction_def)
delAction.triggered.connect(self.delAction_def)
backupAction.triggered.connect(self.backupAction_def)
self.tb_new = self.addToolBar('New')
self.tb_edit = self.addToolBar('Edit')
self.tb_del = self.addToolBar('Del')
self.tb_backup = self.addToolBar('Backup')
self.tb_new.addAction(newAction)
self.tb_edit.addAction(editAction)
self.tb_del.addAction(delAction)
self.tb_backup.addAction(backupAction)
def backupAction_def(self):
pass
def initDB(self):
pass
def initGrid(self):
self.grid = QTableWidget()
self.setCentralWidget(self.grid)
self.grid.setColumnCount(4)
self.grid.setRowCount(0)
column_width = [75, 150, 270, 150]
for column in range(4):
self.grid.setColumnWidth(column, column_width[column])
headerlabels = ['Website', 'Username', 'Password', 'Url']
self.grid.setHorizontalHeaderLabels(headerlabels)
self.grid.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.grid.setSelectionBehavior(QAbstractItemView.SelectRows)
def newAction_def(self):
pass
def editAction_def(self):
pass
def delAction_def(self):
pass
def showHint(self):
pass
def showDialog(self, ws = '', un = '', pw = '', url = ''):
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
pwk = PasswordManagerSystem()
pwk.show()
app.exec_()
pwk.conn.close()
sys.exit(0)
首先整个class继承自QmainWindow, 一开始初始化的时候,先加载工具栏(注意我的认知里面只有QMainWindow才有工具栏,希望这句话不会被打脸~),
添加四个工具栏按钮,这四个工具栏按钮这里是使用的图标,关于如何加载图片资源下一节再讲;给每个图标添加提示信息
newAction = QAction(QIcon(':images/new.png'), 'New Ctrl+N', self)#添加图标,当鼠标悬浮到这个按钮的时候,显示提示信息
然后绑定快捷键
newAction.setShortcut('Ctrl+N')#绑定快捷键
绑定触发事件
newAction.triggered.connect(self.newAction_def)#绑定触发事件
添加真正的工具栏,并且取名字
self.tb_new = self.addToolBar('New')
将Action添加关联到工具栏
self.tb_new.addAction(newAction)
工具栏加载完毕,初始化数据库相关的,这一部分随后再说
接着是初始化显示页面
self.initGrid()
def initGrid(self):
self.grid = QTableWidget() #一个tableview
self.setCentralWidget(self.grid)
self.grid.setColumnCount(4) #设置4列
self.grid.setRowCount(0) #设置第一行
column_width = [75, 150, 270, 150] #设置没一列的宽度
for column in range(4):
self.grid.setColumnWidth(column, column_width[column])
headerlabels = ['Website', 'Username', 'Password', 'Url'] #第一行当作表头
self.grid.setHorizontalHeaderLabels(headerlabels) #设置第一行表头
self.grid.setEditTriggers(QAbstractItemView.NoEditTriggers) #设置表格不可编辑
self.grid.setSelectionBehavior(QAbstractItemView.SelectRows) #设置只能一行一行的选择
目前实现之后界面应该是这个样子