PyQt4百行代碼自制密碼管理器(一):基本框架搭建

1.引言

很多時候,教程只是教給你了模塊使用上的基礎知識,而各個模塊就像積木一樣,只有把他們合理地拼在一起,才能構建成一個完整、有價值的應用。這裏,我們就來進行一次PyQt4的實例開發,我將簡單介紹如何用短短百行代碼實現一個密碼管理器。
首先,你的電腦應該具備Python+PyQt的開發環境,我這裏使用的版本是Python2.7+PyQt4。其次,你應該具備基本的Python語法知識、一些面向對象的編程思想和一些PyQt方面的知識。
作者能力有限,還請大家包涵,歡迎提出建議!
那麼,我們開始吧!

2.基本框架設計

我們的簡單密碼管理器應該具備如下最基本的功能:
- 可以以表格形式顯示出已有的賬戶信息;
- 可以新建賬戶信息;
- 可以編輯修改已有的賬戶信息;
- 可以刪除已有的賬戶信息;
- 關閉程序後,信息不會丟失;
接着,我們想像應用的圖形界面應該是這個樣子的【要求不要太高嘛】:
這裏寫圖片描述
這裏我們就應該對這個程序怎麼寫有一個大致的想法了:最上面一個toolbar,中間是一個table,數據存儲在數據庫中。
那麼下面就是具體的實現了。

3.寫出基本框架

我們新建一個Python工程,叫做PWKeeper(密碼管家)。
這裏順便安利一下PyCharm這款IDE,用着很順手。官網:
http://www.jetbrains.com/pycharm/download/
我們寫出一些腳手架的代碼:

import sys
from PyQt4 import QtGui


class PWKeeper(QtGui.QMainWindow):

    def __init__(self):
        super(PWKeeper, self).__init__()
        self.initToolbar()
        self.initDB()
        self.initGrid()
        self.current_row = 0
        self.setGeometry(300, 300, 650, 300)
        self.setWindowTitle('PWKeeper')
        self.setWindowIcon(QtGui.QIcon('icon.png'))

    def initToolbar(self):
        newAction = QtGui.QAction(QtGui.QIcon('new.png'), 'New', self)
        editAction = QtGui.QAction(QtGui.QIcon('edit.png'), 'New', self)
        delAction = QtGui.QAction(QtGui.QIcon('del.png'), 'New', self)
        newAction.setShortcut('Ctrl+N')
        editAction.setShortcut('Ctrl+E')
        delAction.setShortcut('Delete')
        newAction.triggered.connect(self.newAction_def)
        editAction.triggered.connect(self.editAction_def)
        delAction.triggered.connect(self.delAction_def)
        self.tb_new = self.addToolBar('New')
        self.tb_edit = self.addToolBar('Edit')
        self.tb_del = self.addToolBar('Del')
        self.tb_new.addAction(newAction)
        self.tb_edit.addAction(editAction)
        self.tb_del.addAction(delAction)

    def initDB(self):
            pass

    def initGrid(self):
        self.grid = QtGui.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(QtGui.QAbstractItemView.NoEditTriggers)
        self.grid.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)

    def newAction_def(self):
        pass

    def editAction_def(self):
        pass

    def delAction_def(self):
        pass


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    pwk = PWKeeper()
    pwk.show()
    sys.exit(app.exec_())

大部分都非常淺顯易懂。我們用initToolbar()創建工具條,用initDB()初始化數據庫(還沒有實現),用initGrid()創建表格,而current_row這個變量,我們下一節會用到。
代碼中使用的一些圖標文件在本節末尾會附上。

newAction.triggered.connect(self.newAction_def)
editAction.triggered.connect(self.editAction_def)
delAction.triggered.connect(self.delAction_def)

這三句我們將三種Action和我們自己定義的函數相關聯(但還沒有實現)。
主要講一下關於表格的內容。創建表格時我們使用的是QtGui.QTableWidget類。

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(QtGui.QAbstractItemView.NoEditTriggers)
self.grid.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)

第一句是設定無法修改單元格(因爲我們有專門的修改按鈕嘛),第二句是設定只能一行一行選擇(按行選擇有助於修改和刪除功能的實現)。
運行一下,效果應該是這樣的:
這裏寫圖片描述
這樣的話我們的基本框架就算搭建完成了,下一節我們將進入功能的實現部分。
附各種圖標文件:
icon.png:http://download.easyicon.net/png/566430/48/
new.png:http://download.easyicon.net/png/566440/48/
edit.png:http://download.easyicon.net/png/566421/48/
del.png:http://download.easyicon.net/png/566452/48/
【持續更新中】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章