import sys import re import os import threading from PyQt4 import QtCore, QtGui import ui_mainWindow import ui_helpWidget import ui_aboutWidget import lknovel class HelpWidget(QtGui.QDialog, ui_helpWidget.Ui_Dialog): def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.setupUi(self) self.setFixedSize(380, 200) self.pushButton.clicked.connect(lambda: self.close()) class AboutWidget(QtGui.QDialog, ui_aboutWidget.Ui_Dialog): def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.setupUi(self) self.setFixedSize(320, 120) self.pushButton.clicked.connect(lambda: self.close()) class MainWindow(QtGui.QMainWindow, ui_mainWindow.Ui_MainWindow): sigWarningMessage = QtCore.pyqtSignal(str, str) sigInformationMessage = QtCore.pyqtSignal(str, str) def __init__(self, parent=None): QtGui.QMainWindow.__init__(self, parent) self.setupUi(self) self.setFixedSize(520, 250) self.installEventFilter(self) self.setWindowTitle('lknovel-轻之国度在线轻小说转epub') self.helpAction = QtGui.QAction('&Help', self) self.helpAction.setStatusTip('使用说明') self.aboutAction = QtGui.QAction('&About', self) self.aboutAction.setStatusTip('关于') self.menubar.addAction(self.helpAction) self.menubar.addAction(self.aboutAction) self.setting = QtCore.QSettings('kk', 'lknovel') if self.setting.value('savePath'): self.savePath = self.setting.value('savePath') else: self.savePath = os.path.join(os.path.expanduser('~'), 'Desktop') self.directoryLineEdit.setText(self.savePath) self.coverPath = '' self.startButton.clicked.connect(self.createEpub) self.sigInformationMessage.connect(self.showInformationMessage) self.sigWarningMessage.connect(self.showWarningMessage) self.directoryButton.clicked.connect(self.selectSaveDirectory) self.coverButton.clicked.connect(self.selectCover) lknovel.SENDER.sigChangeStatus.connect(self.changeStatus) lknovel.SENDER.sigWarningMessage.connect(self.showWarningMessage) lknovel.SENDER.sigInformationMessage.connect(self.showInformationMessage) lknovel.SENDER.sigButton.connect(lambda: self.startButton.setEnabled(True)) self.helpAction.triggered.connect(self.openHelpWidget) self.aboutAction.triggered.connect(self.openAboutWidget) def createEpub(self): urls = self.urlTextEdit.toPlainText().strip() totalCheck = re.compile( r'^(((http://lknovel.lightnovel.cn/main/vollist/(\d+).html)|(http://lknovel.lightnovel.cn/main/book/(\d+).html))\s*)+$') ok = 1 for url in urls.split('\n'): if not totalCheck.search(url.strip()): ok = 0 break if ok: self.setting.setValue('savePath', self.savePath) t = threading.Thread(target=lknovel.start, args=(','.join(urls.split('\n')), self.savePath, self.coverPath)) t.start() self.startButton.setEnabled(False) else: self.sigWarningMessage.emit('网址错误', '请输入正确的网址,例如:\nhttp://lknovel.lightnovel.cn/main/vollist/726.html\nhttp://lknovel.lightnovel.cn/main/book/2664.html') def selectSaveDirectory(self): tempPath = str(QtGui.QFileDialog.getExistingDirectory(self, "选择文件夹", self.savePath)) if tempPath: self.savePath = tempPath self.directoryLineEdit.setText(self.savePath) def selectCover(self): tempPath = str( QtGui.QFileDialog.getOpenFileNameAndFilter(self, "选择文件", os.path.join(os.path.expanduser('~'), 'Desktop'), self.tr('图片文件(*.png *.jpg)'))[0]) if tempPath: self.coverPath = tempPath self.coverLineEdit.setText(self.coverPath) def workDone(self): self.changeStatus('') self.sigInformationMessage.emit('完成', 'EPUB已生成') self.startButton.setEnabled(True) def openHelpWidget(self): self.helpWidget = HelpWidget() self.helpWidget.show() def openAboutWidget(self): self.aboutWidget = AboutWidget() self.aboutWidget.show() def changeStatus(self, text): self.statusbar.showMessage(text) #窗口激活时检测剪贴板 符合url规则自动填充至urlLineEdit def eventFilter(self, object, event): if event.type() == QtCore.QEvent.WindowActivate: clipboardText = QtGui.QApplication.clipboard().text() totalCheck = re.compile( r'^(((http://lknovel.lightnovel.cn/main/vollist/(\d+).html)|(http://lknovel.lightnovel.cn/main/book/(\d+).html))\s*)+$') if totalCheck.search(clipboardText): self.urlTextEdit.setText(clipboardText) return False def showWarningMessage(self, title, content): QtGui.QMessageBox.warning(self, title, content, buttons=QtGui.QMessageBox.Ok, defaultButton=QtGui.QMessageBox.NoButton) def showInformationMessage(self, title, content): QtGui.QMessageBox.information(self, title, content, buttons=QtGui.QMessageBox.Ok, defaultButton=QtGui.QMessageBox.NoButton) if __name__ == '__main__': app = QtGui.QApplication(sys.argv) lkMainWidndow = MainWindow() lkMainWidndow.show() app.exec_()