Files
kman/kmanapp.py
2020-06-06 08:43:34 +08:00

224 lines
7.2 KiB
Python

import sys
from time import sleep
from threading import Thread
import _thread
import threading
from PySide2.QtWidgets import QApplication
from PySide2.QtWidgets import QMainWindow
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
ONLY_TEST = 0
class kmanWindow(QMainWindow):
"""
def __init__(self, *args, **kwargs):
super(kmanWindow, self).__init__(*args, **kwargs)
"""
def __init__(self, parent=None):
super(kmanWindow, self).__init__(parent)
self.stat_str = 'status information'
self.search_str = ''
self.local_fn = CLIPPATH
# create ui and initial it
ui = Ui_MainWindow()
ui.setupUi(self)
self.ui = ui
self.km = kMan()
self.books = self.km.import_clips('local')
# loop check kindle is connected or not
# to be implement
"""
try:
#_thread.start_new_thread(self.check_kindle_status)
t1 = threading.Thread(target=check_kindle_status)
t1.start()
except:
print ("Error: can not start thread")
"""
# connect action/toolbutton to slot functions
ui.actionimportkindle.triggered.connect(lambda: self.import_kindle(self.books))
ui.actionimportlocal.triggered.connect(lambda: self.import_local())
ui.actionconfig.triggered.connect(lambda: self.config())
ui.actionwords.triggered.connect(lambda: self.words())
ui.actionstatistic.triggered.connect(lambda: self.statistic())
ui.actionhomepage.triggered.connect(lambda: self.homepage())
ui.actionabout.triggered.connect(lambda: self.about())
ui.actionflush.triggered.connect(lambda: self.flush())
ui.searchComboBox.currentIndexChanged.connect(self.search_scope_change)
ui.searchToolButton.clicked.connect(self.search_button_clicked)
ui.treeView.clicked.connect(self.clicked_items)
self.add_ui_component()
#add_ui_component() ###! can not found this function
def add_ui_component(self):
self.ui.searchComboBox.addItems(['ALL','bookname','content','author'])
if not ONLY_TEST: # XXXXXXXXXXXXX
model = QStandardItemModel()
rootItem = model.invisibleRootItem()
idx = 0
for i in range(4):
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
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):
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 clicked_items(self):
print( 'call clicked_items()' )
def search_button_clicked(self):
print( 'call search_button_clicked()' )
def search_scope_change(self,t):
p = {0:'ALL',1:'TITLE',2:'AUTHOR',3:'CONTENT'}
s = self.ui.searchLineEdit.text()
#print(self.books)
#print(search_clip(self.books,s,'ALL',p[t]))
print('call search_scope_change()')
def check_kindle_status(self):
while True:
self.show_status_info()
sleep(1)
def show_status_info(self):
""" show status information on statusbar
Args:
conn: 1 if kindle is connected else 0
Return:
conn
"""
status = self.km.status_info()
self.ui.statusbar.showMessage(status[0],0)
clabel = QLabel(status[1])
if not self.km.status:
pe = QPalette()
pe.setColor(QPalette.WindowText,Qt.red)
#clabel.setAutoFillBackground(True)
clabel.setPalette(pe)
self.ui.statusbar.addPermanentWidget(clabel, stretch=0)
# define slot functions
def import_kindle(self,bks):
status = self.km.status_info()
self.show_status_info()
print(bks)
pass
def import_local(self):
fn, ft = QFileDialog.getOpenFileName(self,
"choose file to import",
'./', # 起始路径
"All Files (*);;Text Files (*.txt)") # 设置文件扩展名过滤,用双分号间隔
self.fn = fn
#print('filename ', fn, 'filetype ', ft)
if fn == "": return False
def config(self):
print("call slot config()")
pass
def words(self):
print("call slot words()")
pass
def statistic(self):
print("call slot statistic()")
pass
def homepage(self):
print("call slot homepage()")
pass
def about(self):
self.messagebox('\n'+ \
' kindle management tool \n\n' + \
' v1.0.4\n\n' + \
' Author: chengan\n\n' + \
' douboer@gmail.com')
print("call slot about()")
pass
def flush(self):
print("call slot flush()")
pass
# unify messagebox
def messagebox(self, showinfo):
msgBox = QMessageBox()
msgBox.setText(showinfo)
msgBox.setInformativeText("")
msgBox.setIcon(QMessageBox.Information)
msgBox.setStandardButtons(QMessageBox.Cancel | QMessageBox.Ok)
msgBox.setBaseSize(QSize(600, 300))
r = msgBox.exec()
if __name__ == "__main__":
import sys
from PySide2.QtWidgets import QApplication, QLabel
app = QApplication(sys.argv)
kmw = kmanWindow()
kmw.resize(900, 600)
kmw.show()
app.exec_()