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)   #设置只能一行一行的选择

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

posted @ 2018-12-20 10:47  枫奇丶宛南  阅读(74)  评论(0编辑  收藏  举报