kindle manager

This commit is contained in:
gavin
2020-06-05 14:44:24 +08:00
parent d62b909849
commit c0bfa52fc3
16 changed files with 1027 additions and 424 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -59,15 +59,22 @@ b['1']['2'] = {'3':1} # OK
- design GUI with qdesigner ![kman GUI](https://i.loli.net/2020/06/03/wlFETiSCPmx29hI.png)
- define toolbar action's slots
# feature plan
## 20200528
- first abstract from kindle hard / local directory for different OS
- add GUI use QT **done**
## 20200604
## 1.0.4 (20200604)
### feature
- refactoring kman.py
- creat constant class for all constant
- creat config dialog to do some constant configuration
- creat xman class for all clipping manipulation
- design config dialog & statusbar information![statusbar & config dialog](https://i.loli.net/2020/06/04/zg4W6M1bUPch2vB.jpg)
## learn lesson
- generate ui source(.py) use pyqtuic will 'import kmanapp\_rc',
so I need to use resouce file(.qrc) to manage resouce(icons),
and generator rcc binnay file, must kmanapp\_rc.py
command: pyside2-rcc -binary kmanapp.qrc -o kmanapp\_rc.py
# feature plan
## 20200528
- first abstract from kindle hard / local directory for different OS
- add GUI use QT **done**

2
cui
View File

@@ -1,2 +1,2 @@
pyuic mainwindow.ui -o mainwindow.py
pyside2-rcc -binary kman.qrc -o kman.rcc
pyside2-rcc -binary kmanapp.qrc -o kmanapp_rc.py

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

BIN
icons/book3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
icons/book_open.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 631 B

BIN
icons/emblem_library.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
icons/register.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 B

View File

@@ -2,12 +2,20 @@
import sys
from PySide2.QtWidgets import QApplication
from PySide2.QtWidgets import QMainWindow
from PySide2.QtGui import QStandardItemModel
from PySide2.QtGui import QStandardItem
from PySide2.QtCore import (QCoreApplication, QDate, QDateTime, QMetaObject,
QObject, QPoint, QRect, QSize, QTime, QUrl, Qt)
from PySide2.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont,
QFontDatabase, QIcon, QKeySequence, QLinearGradient, QPalette, QPainter,
QPixmap, QRadialGradient, QStandardItem, QStandardItemModel)
from PySide2.QtWidgets import *
from mainwindow import Ui_MainWindow
from kman import *
# import binary resource file(kmanapp_rc.py)
import kmanapp_rc
class kmanWindow(QMainWindow):
"""
def __init__(self, *args, **kwargs):
@@ -38,7 +46,7 @@ class kmanWindow(QMainWindow):
ui.searchComboBox.currentIndexChanged.connect(self.search_scope_change)
ui.searchToolButton.clicked.connect(self.search_button_clicked)
ui.treeView.activated.connect(self.activated_items)
ui.treeView.clicked.connect(self.clicked_items)
self.add_ui_component()
#add_ui_component() ###! can not found this function
@@ -49,25 +57,48 @@ class kmanWindow(QMainWindow):
#inert test data xxxxxxxx
model = QStandardItemModel()
rootItem = model.invisibleRootItem()
idx = 0
for i in range(4):
item = QStandardItem('item {}'.format(i))
idx += 1
item = QStandardItem('item {}'.format(idx))
rootItem.appendRow(item)
icon = QIcon()
icon.addFile(u":/icons/book_open_bookmark.png", QSize(), QIcon.Normal, QIcon.Off)
item.setIcon(icon)
if i==0:
parentItem = item
parentItem.appendRows([QStandardItem('append rows {}'.format(i+10)) for i in range(5)])
icon = QIcon()
icon.addFile(u":/icons/emblem_library.png", QSize(), QIcon.Normal, QIcon.Off)
item.setIcon(icon)
parentItem.appendRows([QStandardItem('append rows {}'.format(i+idx)) for i in range(5)])
if i==1:
parentItem = item
for i in range(5):
idx += 1
item = QStandardItem('type item {}'.format(i+idx))
#item.setEnabled(False)
item.setEditable(False)
icon = QIcon()
icon.addFile(u":/icons/register.png", QSize(), QIcon.Normal, QIcon.Off)
item.setIcon(icon)
parentItem.appendRow(item)
if i==3:
parentItem = item
for i in range(5):
item = QStandardItem('another item {}'.format(i+4))
idx += 1
item = QStandardItem('another item {}'.format(i+idx))
#item.setEnabled(False)
item.setEditable(False)
icon = QIcon()
icon.addFile(u":/icons/book_open.png", QSize(), QIcon.Normal, QIcon.Off)
item.setIcon(icon)
parentItem.appendRow(item)
self.ui.treeView.setModel(model)
def activated_items(self):
print( 'call activated_items()' )
def clicked_items(self):
print( 'call clicked_items()' )
def search_button_clicked(self):
print( 'call search_button_clicked()' )
@@ -116,7 +147,6 @@ class kmanWindow(QMainWindow):
def messageBox(self, showInfo):
box = QMessageBox.about(self, 'Kindle Management', showInfo)
if __name__ == "__main__":
import sys
from PySide2.QtWidgets import QApplication, QLabel

View File

@@ -1,3 +1,3 @@
{
"files": ["kmanapp.py","kman.qrc","mainwindow.ui"]
"files": ["kmanapp.py","mainwindow.ui","kmanapp.qrc"]
}

View File

@@ -40,5 +40,11 @@
<file>icons/refresh.png</file>
<file>icons/statistics.png</file>
<file>mainwindow.ui</file>
<file>icons/booksicon.png</file>
<file>icons/book_open.png</file>
<file>icons/book_open_bookmark.png</file>
<file>icons/emblem_library.png</file>
<file>icons/book3.png</file>
<file>icons/register.png</file>
</qresource>
</RCC>

File diff suppressed because it is too large Load Diff

View File

@@ -15,6 +15,7 @@ from PySide2.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont,
QPixmap, QRadialGradient)
from PySide2.QtWidgets import *
import kmanapp_rc
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
@@ -24,47 +25,47 @@ class Ui_MainWindow(object):
self.actionimportlocal = QAction(MainWindow)
self.actionimportlocal.setObjectName(u"actionimportlocal")
icon = QIcon()
icon.addFile(u"icons/downr.png", QSize(), QIcon.Normal, QIcon.Off)
icon.addFile(u":/icons/downr.png", QSize(), QIcon.Normal, QIcon.Off)
self.actionimportlocal.setIcon(icon)
self.actionimportkindle = QAction(MainWindow)
self.actionimportkindle.setObjectName(u"actionimportkindle")
icon1 = QIcon()
icon1.addFile(u"icons/down.png", QSize(), QIcon.Normal, QIcon.Off)
icon1.addFile(u":/icons/down.png", QSize(), QIcon.Normal, QIcon.Off)
self.actionimportkindle.setIcon(icon1)
self.actionconfig = QAction(MainWindow)
self.actionconfig.setObjectName(u"actionconfig")
icon2 = QIcon()
icon2.addFile(u"icons/config.png", QSize(), QIcon.Normal, QIcon.Off)
icon2.addFile(u":/icons/config.png", QSize(), QIcon.Normal, QIcon.Off)
self.actionconfig.setIcon(icon2)
self.actionflush = QAction(MainWindow)
self.actionflush.setObjectName(u"actionflush")
icon3 = QIcon()
icon3.addFile(u"icons/refresh.png", QSize(), QIcon.Normal, QIcon.Off)
icon3.addFile(u":/icons/refresh.png", QSize(), QIcon.Normal, QIcon.Off)
self.actionflush.setIcon(icon3)
self.actionwords = QAction(MainWindow)
self.actionwords.setObjectName(u"actionwords")
icon4 = QIcon()
icon4.addFile(u"icons/books.png", QSize(), QIcon.Normal, QIcon.Off)
icon4.addFile(u":/icons/books.png", QSize(), QIcon.Normal, QIcon.Off)
self.actionwords.setIcon(icon4)
self.actionstatistic = QAction(MainWindow)
self.actionstatistic.setObjectName(u"actionstatistic")
icon5 = QIcon()
icon5.addFile(u"icons/statistics.png", QSize(), QIcon.Normal, QIcon.Off)
icon5.addFile(u":/icons/statistics.png", QSize(), QIcon.Normal, QIcon.Off)
self.actionstatistic.setIcon(icon5)
self.actionhomepage = QAction(MainWindow)
self.actionhomepage.setObjectName(u"actionhomepage")
icon6 = QIcon()
icon6.addFile(u"icons/home.png", QSize(), QIcon.Normal, QIcon.Off)
icon6.addFile(u":/icons/home.png", QSize(), QIcon.Normal, QIcon.Off)
self.actionhomepage.setIcon(icon6)
self.actionabout = QAction(MainWindow)
self.actionabout.setObjectName(u"actionabout")
icon7 = QIcon()
icon7.addFile(u"icons/question.png", QSize(), QIcon.Normal, QIcon.Off)
icon7.addFile(u":/icons/question.png", QSize(), QIcon.Normal, QIcon.Off)
self.actionabout.setIcon(icon7)
self.actionsearch = QAction(MainWindow)
self.actionsearch.setObjectName(u"actionsearch")
icon8 = QIcon()
icon8.addFile(u"icons/Pixadex.png", QSize(), QIcon.Normal, QIcon.Off)
icon8.addFile(u":/icons/Pixadex.png", QSize(), QIcon.Normal, QIcon.Off)
self.actionsearch.setIcon(icon8)
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
@@ -90,7 +91,7 @@ class Ui_MainWindow(object):
self.searchToolButton = QToolButton(self.centralwidget)
self.searchToolButton.setObjectName(u"searchToolButton")
icon9 = QIcon()
icon9.addFile(u"icons/search.jpeg", QSize(), QIcon.Normal, QIcon.Off)
icon9.addFile(u":/icons/search.jpeg", QSize(), QIcon.Normal, QIcon.Off)
self.searchToolButton.setIcon(icon9)
self.horizontalLayout.addWidget(self.searchToolButton)

View File

@@ -44,8 +44,8 @@
<string>...</string>
</property>
<property name="icon">
<iconset>
<normaloff>icons/search.jpeg</normaloff>icons/search.jpeg</iconset>
<iconset resource="kmanapp.qrc">
<normaloff>:/icons/search.jpeg</normaloff>:/icons/search.jpeg</iconset>
</property>
</widget>
</item>
@@ -137,8 +137,8 @@
</widget>
<action name="actionimportlocal">
<property name="icon">
<iconset>
<normaloff>icons/downr.png</normaloff>icons/downr.png</iconset>
<iconset resource="kmanapp.qrc">
<normaloff>:/icons/downr.png</normaloff>:/icons/downr.png</iconset>
</property>
<property name="text">
<string>importlocal</string>
@@ -149,8 +149,8 @@
</action>
<action name="actionimportkindle">
<property name="icon">
<iconset>
<normaloff>icons/down.png</normaloff>icons/down.png</iconset>
<iconset resource="kmanapp.qrc">
<normaloff>:/icons/down.png</normaloff>:/icons/down.png</iconset>
</property>
<property name="text">
<string>importkindle</string>
@@ -161,8 +161,8 @@
</action>
<action name="actionconfig">
<property name="icon">
<iconset>
<normaloff>icons/config.png</normaloff>icons/config.png</iconset>
<iconset resource="kmanapp.qrc">
<normaloff>:/icons/config.png</normaloff>:/icons/config.png</iconset>
</property>
<property name="text">
<string>config</string>
@@ -173,8 +173,8 @@
</action>
<action name="actionflush">
<property name="icon">
<iconset>
<normaloff>icons/refresh.png</normaloff>icons/refresh.png</iconset>
<iconset resource="kmanapp.qrc">
<normaloff>:/icons/refresh.png</normaloff>:/icons/refresh.png</iconset>
</property>
<property name="text">
<string>refresh</string>
@@ -185,8 +185,8 @@
</action>
<action name="actionwords">
<property name="icon">
<iconset>
<normaloff>icons/books.png</normaloff>icons/books.png</iconset>
<iconset resource="kmanapp.qrc">
<normaloff>:/icons/books.png</normaloff>:/icons/books.png</iconset>
</property>
<property name="text">
<string>words</string>
@@ -197,8 +197,8 @@
</action>
<action name="actionstatistic">
<property name="icon">
<iconset>
<normaloff>icons/statistics.png</normaloff>icons/statistics.png</iconset>
<iconset resource="kmanapp.qrc">
<normaloff>:/icons/statistics.png</normaloff>:/icons/statistics.png</iconset>
</property>
<property name="text">
<string>statistic</string>
@@ -209,8 +209,8 @@
</action>
<action name="actionhomepage">
<property name="icon">
<iconset>
<normaloff>icons/home.png</normaloff>icons/home.png</iconset>
<iconset resource="kmanapp.qrc">
<normaloff>:/icons/home.png</normaloff>:/icons/home.png</iconset>
</property>
<property name="text">
<string>homepage</string>
@@ -221,8 +221,8 @@
</action>
<action name="actionabout">
<property name="icon">
<iconset>
<normaloff>icons/question.png</normaloff>icons/question.png</iconset>
<iconset resource="kmanapp.qrc">
<normaloff>:/icons/question.png</normaloff>:/icons/question.png</iconset>
</property>
<property name="text">
<string>about</string>
@@ -233,8 +233,8 @@
</action>
<action name="actionsearch">
<property name="icon">
<iconset>
<normaloff>icons/Pixadex.png</normaloff>icons/Pixadex.png</iconset>
<iconset resource="kmanapp.qrc">
<normaloff>:/icons/Pixadex.png</normaloff>:/icons/Pixadex.png</iconset>
</property>
<property name="text">
<string>search</string>
@@ -244,6 +244,8 @@
</property>
</action>
</widget>
<resources/>
<resources>
<include location="kmanapp.qrc"/>
</resources>
<connections/>
</ui>

View File

@@ -1,249 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>774</width>
<height>410</height>
</rect>
</property>
<property name="windowTitle">
<string>Kindle Management</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="searchLabel">
<property name="text">
<string>Search</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="searchLineEdit">
<property name="placeholderText">
<string>可按书名、作者、内容搜索笔记</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="searchComboBox">
<property name="currentText">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="searchToolButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset>
<normaloff>icons/search.jpeg</normaloff>icons/search.jpeg</iconset>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QSplitter" name="splitter_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<widget class="QTreeView" name="treeView">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>400</width>
<height>16777215</height>
</size>
</property>
</widget>
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<widget class="QTableView" name="tableView">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
<widget class="QTextEdit" name="textEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>400</height>
</size>
</property>
</widget>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>774</width>
<height>22</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="toolBar">
<property name="windowTitle">
<string>toolBar</string>
</property>
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
<addaction name="actionimportkindle"/>
<addaction name="actionimportlocal"/>
<addaction name="separator"/>
<addaction name="actionwords"/>
<addaction name="actionstatistic"/>
<addaction name="separator"/>
<addaction name="actionconfig"/>
<addaction name="separator"/>
<addaction name="actionhomepage"/>
<addaction name="actionabout"/>
<addaction name="separator"/>
<addaction name="actionflush"/>
</widget>
<action name="actionimportlocal">
<property name="icon">
<iconset>
<normaloff>icons/downr.png</normaloff>icons/downr.png</iconset>
</property>
<property name="text">
<string>importlocal</string>
</property>
<property name="toolTip">
<string>import clipping file from local clipping file</string>
</property>
</action>
<action name="actionimportkindle">
<property name="icon">
<iconset>
<normaloff>icons/down.png</normaloff>icons/down.png</iconset>
</property>
<property name="text">
<string>importkindle</string>
</property>
<property name="toolTip">
<string>import clipping file from kindle</string>
</property>
</action>
<action name="actionconfig">
<property name="icon">
<iconset>
<normaloff>icons/config.png</normaloff>icons/config.png</iconset>
</property>
<property name="text">
<string>config</string>
</property>
<property name="toolTip">
<string>configuration</string>
</property>
</action>
<action name="actionflush">
<property name="icon">
<iconset>
<normaloff>icons/refresh.png</normaloff>icons/refresh.png</iconset>
</property>
<property name="text">
<string>refresh</string>
</property>
<property name="toolTip">
<string>refresh import file/quick import from kindle</string>
</property>
</action>
<action name="actionwords">
<property name="icon">
<iconset>
<normaloff>icons/books.png</normaloff>icons/books.png</iconset>
</property>
<property name="text">
<string>words</string>
</property>
<property name="toolTip">
<string>words</string>
</property>
</action>
<action name="actionstatistic">
<property name="icon">
<iconset>
<normaloff>icons/statistics.png</normaloff>icons/statistics.png</iconset>
</property>
<property name="text">
<string>statistic</string>
</property>
<property name="toolTip">
<string>statistics reading habbit</string>
</property>
</action>
<action name="actionhomepage">
<property name="icon">
<iconset>
<normaloff>icons/home.png</normaloff>icons/home.png</iconset>
</property>
<property name="text">
<string>homepage</string>
</property>
<property name="toolTip">
<string>redirect to my homepage</string>
</property>
</action>
<action name="actionabout">
<property name="icon">
<iconset>
<normaloff>icons/question.png</normaloff>icons/question.png</iconset>
</property>
<property name="text">
<string>about</string>
</property>
<property name="toolTip">
<string>open about dialog</string>
</property>
</action>
<action name="actionsearch">
<property name="icon">
<iconset>
<normaloff>icons/Pixadex.png</normaloff>icons/Pixadex.png</iconset>
</property>
<property name="text">
<string>search</string>
</property>
<property name="toolTip">
<string>search note</string>
</property>
</action>
</widget>
<resources/>
<connections/>
</ui>