class MainWindow(QMainWindow): """ Create the Application Main Window CLass """ def __init__(self): """ Constructo FUnction """ QMainWindow.__init__(self) self.setWindowTitle("Application Title Here") self.setGeometry(300, 250, 400, 300) self.statusLabel = QLabel('Showing Progress') self.progressBar = QProgressBar() self.progressBar.setMinimum(0) self.progressBar.setMaximum(1000000) def CreateStatusBar(self): """ Funtion to Create Status Bar """ self.myStatusBar = QStatusBar() self.progressBar.setValue(10) self.myStatusBar.addWidget(self.statusLabel, 1) self.myStatusBar.addWidget(self.progressBar, 2) self.setStatusBar(self.myStatusBar) def ShowProgress(self): """ Function to Show Progress """ while self.progressBar.value() < self.progressBar.maximum(): self.progressBar.setValue(self.progressBar.value() + 1) self.statusLabel.setText('Ready')
class MainWindow(QMainWindow): """ Our main window class """ def __init__(self): QMainWindow.__init__(self) self.setWindowTitle("Main Window") self.setGeometry(300, 250, 400, 300) self.statusLabel = QLabel('Showing Progress') self.progressBar = QProgressBar() self.progressBar.setMinimum(0) self.progressBar.setMaximum(100) def CreateStatusBar(self): self.myStatusBar = QStatusBar() self.progressBar.setValue(10) self.myStatusBar.addWidget(self.statusLabel, 1) self.myStatusBar.addWidget(self.progressBar, 2) #self.myStatusBar.showMessage('Ready', 2000) self.setStatusBar(self.myStatusBar) def showProgress(self): while(self.progressBar.value() < self.progressBar.maximum()): self.progressBar.setValue(self.progressBar.value() + 10) time.sleep(1) self.statusLabel.setText('Ready')
class MainWindow(QMainWindow): """ Our Main Window """ def __init__(self): """ Constructor Fucntion """ QMainWindow.__init__(self) self.setWindowTitle("Main Window") self.setGeometry(300, 250, 400, 300) self.statusLabel = QLabel('Showing Progress') self.progressBar = QProgressBar() self.progressBar.setMinimum(0) self.progressBar.setMaximum(100) def createStatusBar(self): """ Function to create the status bar """ self.myStatusBar = QStatusBar() self.progressBar.setValue(10) self.myStatusBar.addWidget(self.statusLabel, 1) self.myStatusBar.addWidget(self.progressBar, 2) self.setStatusBar(self.myStatusBar) def showProgress(self): """ Function to show progress """ while(self.progressBar.value() < self.progressBar.maximum()): self.progressBar.setValue(self.progressBar.value() + 10) time.sleep(1) self.statusLabel.setText('Ready')
def main(): """Execute QDarkStyle example.""" parser = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument( '--qt_from', default='qtpy', choices=['pyqt', 'pyqt5', 'pyside', 'pyside2', 'qtpy', 'pyqtgraph'], help="Choose which wrapper/framework is to be used to run the example.", type=str) parser.add_argument( '--no_dark', action='store_true', help="Exihibts the original window (without qdarkstyle).") parser.add_argument('--test', action='store_true', help="Auto close window after 2s.") parser.add_argument('--reset', action='store_true', help="Reset GUI settings (position, size).") parser.add_argument('--screenshots', action='store_true', help="Generate screenshots.") # parsing arguments from command line args = parser.parse_args() # set log for debug logging.basicConfig(level=logging.DEBUG) # to avoid problems when testing without screen if args.test: os.environ['QT_QPA_PLATFORM'] = 'offscreen' if args.qt_from == 'pyside': # using PySide wrapper from PySide.QtGui import QApplication, QMainWindow, QDockWidget, QStatusBar, QLabel, QPushButton from PySide.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize # import examples UI according to wrapper from ui.mw_menus_pyside_ui import Ui_MainWindow as ui_main from ui.dw_buttons_pyside_ui import Ui_DockWidget as ui_buttons from ui.dw_displays_pyside_ui import Ui_DockWidget as ui_displays from ui.dw_inputs_fields_pyside_ui import Ui_DockWidget as ui_inputs_fields from ui.dw_inputs_no_fields_pyside_ui import Ui_DockWidget as ui_inputs_no_fields from ui.dw_widgets_pyside_ui import Ui_DockWidget as ui_widgets from ui.dw_views_pyside_ui import Ui_DockWidget as ui_views from ui.dw_containers_tabs_pyside_ui import Ui_DockWidget as ui_containers_tabs from ui.dw_containers_no_tabs_pyside_ui import Ui_DockWidget as ui_containers_no_tabs # Getting style style_method = qdarkstyle.load_stylesheet_pyside elif args.qt_from == 'pyqt': # using PyQt4 wrapper from PyQt4.QtGui import QApplication, QMainWindow, QDockWidget, QStatusBar, QLabel, QPushButton from PyQt4.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize # import examples UI according to wrapper from ui.mw_menus_pyqt_ui import Ui_MainWindow as ui_main from ui.dw_buttons_pyqt_ui import Ui_DockWidget as ui_buttons from ui.dw_displays_pyqt_ui import Ui_DockWidget as ui_displays from ui.dw_inputs_fields_pyqt_ui import Ui_DockWidget as ui_inputs_fields from ui.dw_inputs_no_fields_pyqt_ui import Ui_DockWidget as ui_inputs_no_fields from ui.dw_widgets_pyqt_ui import Ui_DockWidget as ui_widgets from ui.dw_views_pyqt_ui import Ui_DockWidget as ui_views from ui.dw_containers_tabs_pyqt_ui import Ui_DockWidget as ui_containers_tabs from ui.dw_containers_no_tabs_pyqt_ui import Ui_DockWidget as ui_containers_no_tabs # Getting style style_method = qdarkstyle.load_stylesheet_pyqt elif args.qt_from == 'pyqt5': # using PyQt5 wrapper from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QStatusBar, QLabel, QPushButton from PyQt5.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize # import examples UI according to wrapper from ui.mw_menus_pyqt5_ui import Ui_MainWindow as ui_main from ui.dw_buttons_pyqt5_ui import Ui_DockWidget as ui_buttons from ui.dw_displays_pyqt5_ui import Ui_DockWidget as ui_displays from ui.dw_inputs_fields_pyqt5_ui import Ui_DockWidget as ui_inputs_fields from ui.dw_inputs_no_fields_pyqt5_ui import Ui_DockWidget as ui_inputs_no_fields from ui.dw_widgets_pyqt5_ui import Ui_DockWidget as ui_widgets from ui.dw_views_pyqt5_ui import Ui_DockWidget as ui_views from ui.dw_containers_tabs_pyqt5_ui import Ui_DockWidget as ui_containers_tabs from ui.dw_containers_no_tabs_pyqt5_ui import Ui_DockWidget as ui_containers_no_tabs # Getting style style_method = qdarkstyle.load_stylesheet_pyqt5 elif args.qt_from == 'pyside2': # using PyQt5 wrapper from PySide2.QtWidgets import QApplication, QMainWindow, QDockWidget, QStatusBar, QLabel, QPushButton from PySide2.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize # import examples UI according to wrapper from ui.mw_menus_pyside2_ui import Ui_MainWindow as ui_main from ui.dw_buttons_pyside2_ui import Ui_DockWidget as ui_buttons from ui.dw_displays_pyside2_ui import Ui_DockWidget as ui_displays from ui.dw_inputs_fields_pyside2_ui import Ui_DockWidget as ui_inputs_fields from ui.dw_inputs_no_fields_pyside2_ui import Ui_DockWidget as ui_inputs_no_fields from ui.dw_widgets_pyside2_ui import Ui_DockWidget as ui_widgets from ui.dw_views_pyside2_ui import Ui_DockWidget as ui_views from ui.dw_containers_tabs_pyside2_ui import Ui_DockWidget as ui_containers_tabs from ui.dw_containers_no_tabs_pyside2_ui import Ui_DockWidget as ui_containers_no_tabs # Getting style style_method = qdarkstyle.load_stylesheet_pyside2 elif args.qt_from == 'qtpy': # using QtPy API from qtpy.QtWidgets import QApplication, QMainWindow, QDockWidget, QStatusBar, QLabel, QPushButton from qtpy.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize # import examples UI according to wrapper from ui.mw_menus_qtpy_ui import Ui_MainWindow as ui_main from ui.dw_buttons_qtpy_ui import Ui_DockWidget as ui_buttons from ui.dw_displays_qtpy_ui import Ui_DockWidget as ui_displays from ui.dw_inputs_fields_qtpy_ui import Ui_DockWidget as ui_inputs_fields from ui.dw_inputs_no_fields_qtpy_ui import Ui_DockWidget as ui_inputs_no_fields from ui.dw_widgets_qtpy_ui import Ui_DockWidget as ui_widgets from ui.dw_views_qtpy_ui import Ui_DockWidget as ui_views from ui.dw_containers_tabs_qtpy_ui import Ui_DockWidget as ui_containers_tabs from ui.dw_containers_no_tabs_qtpy_ui import Ui_DockWidget as ui_containers_no_tabs # Getting style style_method = qdarkstyle.load_stylesheet_from_environment elif args.qt_from == 'pyqtgraph': # using PyQtGraph API from pyqtgraph.Qt.QtGui import QApplication, QMainWindow, QDockWidget, QStatusBar, QLabel, QPushButton from pyqtgraph.Qt.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize #from pyqtgraph.Qt import QtGui, QtCore # import examples UI according to wrapper from ui.mw_menus_pyqtgraph_ui import Ui_MainWindow as ui_main from ui.dw_buttons_pyqtgraph_ui import Ui_DockWidget as ui_buttons from ui.dw_displays_pyqtgraph_ui import Ui_DockWidget as ui_displays from ui.dw_inputs_fields_pyqtgraph_ui import Ui_DockWidget as ui_inputs_fields from ui.dw_inputs_no_fields_pyqtgraph_ui import Ui_DockWidget as ui_inputs_no_fields from ui.dw_widgets_pyqtgraph_ui import Ui_DockWidget as ui_widgets from ui.dw_views_pyqtgraph_ui import Ui_DockWidget as ui_views from ui.dw_containers_tabs_pyqtgraph_ui import Ui_DockWidget as ui_containers_tabs from ui.dw_containers_no_tabs_pyqtgraph_ui import Ui_DockWidget as ui_containers_no_tabs # Getting style style_method = lambda: qdarkstyle.load_stylesheet_from_environment( is_pyqtgraph=True) def write_settings(window): """Get window settings and write it into a file.""" settings = QSettings('QDarkStyle', 'QDarkStyle Example') settings.setValue('pos', window.pos()) settings.setValue('size', window.size()) settings.setValue('state', window.saveState()) def read_settings(window, reset=False): """Read and set window settings from a file.""" settings = QSettings('QDarkStyle', 'QDarkStyle Example') try: pos = settings.value('pos', window.pos()) size = settings.value('size', window.size()) state = settings.value('state', window.saveState()) except Exception: pos = settings.value('pos', window.pos(), type='QPoint') size = settings.value('size', window.size(), type='QSize') state = settings.value('state', window.saveState(), type='QByteArray') if not reset: window.restoreState(state) window.resize(size) window.move(pos) # create the application app = QApplication(sys.argv) app.setOrganizationName('QDarkStyle') app.setApplicationName('QDarkStyle Example') # setup stylesheet style = '' if args.no_dark is False: style = style_method() app.setStyleSheet(style) # create main window window = QMainWindow() window.setObjectName('mainwindow') ui = ui_main() ui.setupUi(window) window.setWindowTitle("QDarkStyle v." + qdarkstyle.__version__) # create docks for buttons dw_buttons = QDockWidget() dw_buttons.setObjectName('buttons') ui_buttons = ui_buttons() ui_buttons.setupUi(dw_buttons) window.addDockWidget(Qt.RightDockWidgetArea, dw_buttons) # create docks for buttons dw_displays = QDockWidget() dw_displays.setObjectName('displays') ui_displays = ui_displays() ui_displays.setupUi(dw_displays) window.addDockWidget(Qt.RightDockWidgetArea, dw_displays) # create docks for inputs - no fields dw_inputs_no_fields = QDockWidget() dw_inputs_no_fields.setObjectName('inputs_no_fields') ui_inputs_no_fields = ui_inputs_no_fields() ui_inputs_no_fields.setupUi(dw_inputs_no_fields) window.addDockWidget(Qt.RightDockWidgetArea, dw_inputs_no_fields) # create docks for inputs - fields dw_inputs_fields = QDockWidget() dw_inputs_fields.setObjectName('_fields') ui_inputs_fields = ui_inputs_fields() ui_inputs_fields.setupUi(dw_inputs_fields) window.addDockWidget(Qt.RightDockWidgetArea, dw_inputs_fields) # create docks for widgets dw_widgets = QDockWidget() dw_widgets.setObjectName('widgets') ui_widgets = ui_widgets() ui_widgets.setupUi(dw_widgets) window.addDockWidget(Qt.LeftDockWidgetArea, dw_widgets) # create docks for views dw_views = QDockWidget() dw_views.setObjectName('views') ui_views = ui_views() ui_views.setupUi(dw_views) window.addDockWidget(Qt.LeftDockWidgetArea, dw_views) # create docks for containers - no tabs dw_containers_no_tabs = QDockWidget() dw_containers_no_tabs.setObjectName('containers_no_tabs') ui_containers_no_tabs = ui_containers_no_tabs() ui_containers_no_tabs.setupUi(dw_containers_no_tabs) window.addDockWidget(Qt.LeftDockWidgetArea, dw_containers_no_tabs) # create docks for containters - tabs dw_containers_tabs = QDockWidget() dw_containers_tabs.setObjectName('containers') ui_containers_tabs = ui_containers_tabs() ui_containers_tabs.setupUi(dw_containers_tabs) window.addDockWidget(Qt.LeftDockWidgetArea, dw_containers_tabs) # tabify right docks window.tabifyDockWidget(dw_buttons, dw_displays) window.tabifyDockWidget(dw_displays, dw_inputs_fields) window.tabifyDockWidget(dw_inputs_fields, dw_inputs_no_fields) # tabify right docks window.tabifyDockWidget(dw_containers_no_tabs, dw_containers_tabs) window.tabifyDockWidget(dw_containers_tabs, dw_widgets) window.tabifyDockWidget(dw_widgets, dw_views) # issues #9120, #9121 on Spyder qstatusbar = QStatusBar() qstatusbar.addWidget( QLabel('Issue Spyder #9120, #9121 - background not matching.')) qstatusbar.addWidget(QPushButton('OK')) window.setStatusBar(qstatusbar) # auto quit after 2s when testing on travis-ci if args.test: QTimer.singleShot(2000, app.exit) # run read_settings(window, args.reset) window.showMaximized() # Save screenshots for differents displays and quit if args.screenshots: window.showFullScreen() QTimer.singleShot( 1000, lambda: create_screenshots(app, window, not args.no_dark)) app.exec_() write_settings(window)
class MainWindow(QMainWindow): """Fenêtre principale du programme""" def __init__(self): QMainWindow.__init__(self) self.setWindowTitle("Main Window") self.setGeometry(300, 250, 400, 300) self.setWindowIcon(QIcon('Stock/appicon.png')) def setupComponent(self): """Initialise l'ensemble des éléments de l'application""" self.setupStatusBar() self.setupZoneText() self.setupMenu() self.setupToolBar() def setupStatusBar(self): """Ajoute une barre de status""" self.progressBar = QProgressBar() self.statusLabel = QLabel('Progression ...') self.progressBar.setMaximum(100) self.progressBar.setMinimum(0) self.statusBar = QStatusBar() # # Affiche un message durant 2 sec après ouverture de l'application # self.statusBar.showMessage('Please Wait ...', 2000) self.progressBar.setValue(10) self.statusBar.addWidget(self.statusLabel, 1) self.statusBar.addWidget(self.progressBar, 2) self.setStatusBar(self.statusBar) def setupZoneText(self): """Ajout du widget central (zone de texte)""" self.textEdit = QTextEdit() self.setCentralWidget(self.textEdit) def setupMenu(self): """Ajout de menus contextuels""" self.createActions() self.createMenu() self.fileMenu.addAction(self.newAction) self.fileMenu.addSeparator() self.fileMenu.addAction(self.exitAction) self.editMenu.addAction(self.copyAction) self.editMenu.addSeparator() self.editMenu.addAction(self.pasteAction) self.helpMenu.addAction(self.aboutAction) def setupToolBar(self): """Ajout de la barre d'outils""" self.mainToolBar = self.addToolBar('Main') self.mainToolBar.addAction(self.newAction) self.mainToolBar.addSeparator() self.mainToolBar.addAction(self.copyAction) self.mainToolBar.addAction(self.pasteAction) def showProgress(self): """Avancement de la barre de progression""" while self.progressBar.value() < self.progressBar.maximum(): self.progressBar.setValue(self.progressBar.value() + 10) time.sleep(1 / 10) # self.statusBar.showMessage('Ready', 2000) self.statusLabel.setText('Ready !!') def createMenu(self): """Création de la barre de menu avec 3 menus""" self.fileMenu = self.menuBar().addMenu('&Fichier') self.editMenu = self.menuBar().addMenu('&Edition') self.helpMenu = self.menuBar().addMenu('&About') def createActions(self): """Création des différentes actions du menu '&' permet de surligner une lettre pour acès rapide Alt+lettre 'shortcut' permet de définir le raccourci de l'action du menu 'statusTip' permet de modifier l'affichage dans la barre de status 'triggered' permet de définir l'action à réaliser""" self.newAction = QAction('&New', self, shortcut=QKeySequence.New, statusTip="Créer un nouveau fichier", triggered=self.newFile) self.exitAction = QAction('&Exit', self, shortcut="Ctrl+Q", statusTip="Quitter l'application", triggered=self.exitFile) self.copyAction = QAction('&Copy', self, shortcut="Ctrl+C", statusTip="Copier", triggered=self.textEdit.copy) self.pasteAction = QAction('&Paste', self, shortcut="Ctrl+V", statusTip="Coller", triggered=self.textEdit.paste) self.aboutAction = QAction('&About', self, statusTip="Infos à propos de l'éditeur", triggered=self.aboutHelp) def newFile(self): """Efface le contenu du widget de text""" self.textEdit.setText('') def exitFile(self): """Ferme le programme""" self.close() def aboutHelp(self): """Affiche des renseignements sur le logiciel""" QMessageBox.about(self, "About this application", "Just a simple text editor using Menu Bar")
class SafeLock(QWidget): def __init__(self): super(SafeLock, self).__init__() main_layout = QVBoxLayout(self) self.Version = '0.5 beta' self.s_error = "QStatusBar{color:red;font-weight:1000;}" self.s_loop = "QStatusBar{color:black;font-weight:1000;}" self.s_norm = "QStatusBar{color:blue;font-style:italic;" self.s_norm += "font-weight:500;}" self.Processing = None self.CP = None self.PPbar = None self.key = None self.DFiles = [] self.picon = r_path("images/favicon.png") self.plogo = r_path("images/logo.png") if name == 'nt': self.picon = r_path("images\\favicon.png") self.plogo = r_path("images\\logo.png") self.icon = QIcon(self.picon) self.logo = QIcon(self.plogo) self.center() self.setStyle() self.setMW(main_layout) self.setSB(main_layout) self.show() def db(self, password="******", dbname="untitled.sld", dc=True): eng = create_engine("sqlite:///%s" % dbname, connect_args={'check_same_thread': False}) Base = declarative_base(bind=eng) Session = sessionmaker(bind=eng) session = Session() class Identifier(Base): __tablename__ = "identifier" id = Column(Integer, primary_key=True) version = Column(Binary) kvd = Column(Binary) def __init__(self, version, kvd): self.id = 0 self.version = version self.kvd = kvd class Folder(Base): __tablename__ = 'folders' id = Column(Integer, primary_key=True) path = Column(Unicode) def __init__(self, path="Empty"): self.path = path class File(Base): __tablename__ = 'files' id = Column(Integer, primary_key=True) name = Column(String) f_id = Column(Integer, ForeignKey('folders.id'), nullable=True) bb = Column(Binary) def __init__(self, name="empty", f_id=0, bb=1010): self.name = name self.f_id = f_id self.bb = bb if dc: Base.metadata.create_all() enc = encryptit(sha256(self.Version).digest(), sha256(password).digest()) session.add(Identifier(enc[0], enc[1])) session.commit() return [eng, Base, session, File, Folder, Identifier, password] def checkP(self, db): try: d = db[2].query(db[5]).filter_by(id=0).first() if d is not None: if isenct(self.Version, d.version, db[6], d.kvd): return True except: pass return False def setStyle(self): self.setMaximumWidth(410) self.setMinimumWidth(410) self.setMaximumHeight(370) self.setMinimumHeight(370) self.setWindowIcon(self.icon) self.activateWindow() self.setWindowTitle("safelock " + self.Version) self.setToolTip( u"단순히 끌어다 놓는 것으로 파일이나 폴더를 암호화하거나" + u" .sld 파일을 복호화할 수 있습니다.") self.setAcceptDrops(True) self.show() def center(self): qrect = self.frameGeometry() cp = QDesktopWidget().availableGeometry().center() qrect.moveCenter(cp) self.move(qrect.topLeft()) def setMW(self, ml): ll = QVBoxLayout() self.mIcon = QLabel() self.mIcon.setAlignment(Qt.AlignCenter) mmicon = self.logo.pixmap(250, 230, QIcon.Active, QIcon.On) self.mIcon.setPixmap(mmicon) self.mInst = QLabel( # u"<center>(Drag and drop files or folders to encrypt them)<br>" + u"<center>(마우스로 끌어다 놓으십시오)<br>" + u"<u>최대 2GB 파일 또는 디렉토리만 가능</u></center>") font = QFont() font.setPointSize(13) font.setBold(True) font.setWeight(75) self.fInst = QLabel('<center></center>') self.mInst.setFont(font) ll.addWidget(self.mIcon) ll.addWidget(self.mInst) ll.addWidget(self.fInst) ml.addLayout(ll) def setSB(self, ml): self.statusb = QStatusBar() ml.addWidget(self.statusb) def modSB(self): if self.PPbar is None: self.PPbar = True self.statusb.clear() self.pbar = QProgressBar() self.pbar.setMaximum(100) self.pbar.setMinimum(0) self.plabel = QLabel() self.statusb.addWidget(self.plabel, 0.5) self.statusb.addWidget(self.pbar, 3) else: self.PPbar = None self.statusb.removeWidget(self.plabel) self.statusb.removeWidget(self.pbar) self.statusb.clear() # def searchF(self, dirname): # filelist = [] # try: # filenames = listdir(dirname) # for filename in filenames: # full_filename = path.join(dirname, filename) # if path.isdir(full_filename): # tmplist = self.searchF(full_filename) # for tmpfile in tmplist: # filelist.append(tmpfile) # else: # tmp = full_filename.replace('\\','/') # filelist.append(tmp) # except PermissionError: # pass # return filelist def saveFile(self, fl): fname, _ = QFileDialog.getSaveFileName(self, u"암호화 경로 설정", fl, "Safelock file (*.sld)") if '.' in fname: tm = fname.split('.') tm = tm[len(tm) - 1] if tm == "sld": try: if path.isfile(fname): remove(fname) except: pass return fname if len(fname) <= 0: return None fname += ".sld" try: if path.isfile(fname): remove(fname) except: pass return fname def extTo(self, fl): fname = QFileDialog.getExistingDirectory(self, u"복호화 경로 설정", fl) if len(fname) <= 0: return None return fname def getPass(self): passwd, re = QInputDialog.getText(self, u"비밀번호", u"입력하신 비밀번호 :", QLineEdit.Password) if len(passwd) > 0 : passwd2, re = QInputDialog.getText(self, u"비밀번호", u"다시한번 입력하세요 :", QLineEdit.Password) if passwd != passwd2: self.errorMsg(u"비밀번호가 맞지 않습니다") return False else: if not re: return False if len(passwd) <= 0: return None return passwd else: if not re: return False else: return None def getPass2(self): passwd, re = QInputDialog.getText(self, u"비밀번호", u"입력하신 비밀번호 :", QLineEdit.Password) if not re: return False if len(passwd) <= 0: return None return passwd def errorMsg(self, msg=u"에러 발생 !"): QMessageBox.critical(self, "Error", msg) return True def aboutMsgg(self): Amsg = u"<center>SafeLock %s " % self.Version Amsg += u"은 Mozilla Public License 버전 2.0에 " Amsg += u"따라 허가된 무료 오픈소스 프로젝트 입니다.<br><br>" Amsg += u" 본 프로그램에 대한 더 많은 정보를 원하시면:<br> " Amsg += u"<b><a href='https://github.com/mjuc4/safelock'> " Amsg += u"https://github.com/mjuc4/safelock/ </a> </b></center>" QMessageBox.about(self, "About", Amsg) return True def getSession(self): self.eng = eng(self.password, self.dbname) Session = sessionmaker(bind=self.eng) self.Base = declarative_base(bind=self.eng) self.Base.metadata.create_all() self.session = Session() return self.session def dragEnterEvent(self, e): if e.mimeData().hasUrls: e.accept() else: e.ignore() def dragMoveEvent(self, e): if e.mimeData().hasUrls: e.accept() else: e.ignore() def dropEvent(self, e): if e.mimeData().hasUrls: e.setDropAction(Qt.CopyAction) e.accept() self.DFiles = [] for url in e.mimeData().urls(): try: if sysname == 'darwin': from Foundation import NSURL fname = NSURL.URLWithString_( url.toString()).filePathURL().path() else: fname = url.toLocalFile() self.DFiles.append(fname) except: pass self.dealD(self.DFiles) else: event.ignore() def in_loop(self): if self.Processing is None: self.Processing = True self.setAcceptDrops(False) self.mIcon.setEnabled(False) self.mInst.setEnabled(False) self.fInst.setText(u"<center>| 취소는 더블 클릭 |</center>") self.setToolTip("Double-Click anywhere to cancel") else: self.Processing = None self.setAcceptDrops(True) self.mIcon.setEnabled(True) self.mInst.setEnabled(True) self.fInst.setText(u"<center>| 취소는 더블 클릭 |</center>") self.setToolTip( u"단순히 끌어다 놓는 것으로 파일이나 폴더를 암호화하거나" + u" .sld 파일을 복호화할 수 있습니다.") def dealD(self, files): def tpp(inp): a = path.basename(inp) return inp.replace(a, '') if len(files) < 1: return False elif len(files) >= 1: if len(files) == 1: tf = files[0].split('.') tf = tf[len(tf) - 1] if tf == 'sld': pw = self.getPass2() if pw is None: self.errorMsg(u"비밀번호 입력하십쇼!") return False elif not pw: return False if not self.checkP(self.db(sha256(pw).digest(), files[0], dc=False)): self.errorMsg( u"비밀번호가 맞지 않습니다. 다시 시도하세요") return False else: fold = self.extTo(tpp(files[0])) if fold is not None: self.CP = fold self.in_loop() self.P = DecryptTH(fold, self.db(pw, files[0], dc=False), sha256(pw).digest()) self.P.start() self.P.somesignal.connect(self.handleStatusMessage) self.P.setTerminationEnabled(True) return True pw = self.getPass() if pw is None: self.errorMsg(u"비밀번호 입력하십시오 !") elif not pw: pass else: fil = self.saveFile(tpp(files[0])) if fil is not None: if path.isfile(fil): try: remove(fil) except: pass self.CP = fil self.in_loop() self.P = EncryptTH(files, self.db(pw, fil), sha256(pw).digest()) self.P.start() self.P.somesignal.connect(self.handleStatusMessage) self.P.setTerminationEnabled(True) return True @Slot(object) def handleStatusMessage(self, message): self.statusb.setStyleSheet(self.s_loop) def getIT(f, o): return int((f / o) * 100) mm = message.split('/') if mm[len(mm) - 1] == '%': if self.PPbar is None: self.modSB() self.pbar.setValue(getIT(int(mm[0]), int(mm[1]))) self.setWindowTitle("Processing : " + str(getIT(int(mm[0]), int(mm[1]))) + "%") self.plabel.setText(mm[0] + '/' + mm[1]) else: self.unsetCursor() if self.PPbar is not None: self.modSB() if message[:7] == '# Error': if self.Processing: self.in_loop() self.statusb.setStyleSheet(self.s_error) self.cleanup() elif message[:6] == '# Stop': self.statusb.setStyleSheet(self.s_error) elif message[:6] == '# Done': if self.Processing: self.in_loop() self.statusb.setStyleSheet(self.s_norm) if message.find('encrypted')>=0 : QMessageBox.question(None,'success',"Encrypted succes") else: QMessageBox.question(None,'success',"Decrypted succes") elif message == "# Loading": self.setCursor(Qt.BusyCursor) self.statusb.setStyleSheet(self.s_norm) self.setWindowTitle('safelock ' + self.Version) self.statusb.showMessage(message) def mousePressEvent(self, event): if event.type() == QEvent.Type.MouseButtonDblClick: if self.Processing is None: self.aboutMsgg() else: self.closeEvent() def closeEvent(self, event=None): if self.Processing is not None: if event is not None: r = QMessageBox.question( self, "Making sure", "Are you sure you want to exit, during an active" + " process ?", QMessageBox.Yes | QMessageBox.No) else: r = QMessageBox.question( self, "Making sure", "Are you sure, you to cancel ?", QMessageBox.Yes | QMessageBox.No) if r == QMessageBox.Yes: self.P.stop() self.cleanup() if event is not None: self.in_loop() event.accept() else: self.in_loop() else: if event is not None: event.ignore() else: if self.CP is not None: try: if path.isfile(self.CP + '-journal'): remove(self.CP + '-journal') except: pass if event is not None: event.accept() def cleanup(self): if self.CP is not None: try: if path.isfile(self.CP + '-journal'): remove(self.CP + '-journal') if path.isfile(self.CP): remove(self.CP) except: pass
class SampleWindow(QMainWindow): """ Our main window class """ def __init__(self,fileName=None): """ Constructor Function """ # QWidget.__init__(self) # self.setWindowTitle("Icon Sample") # self.setGeometry(300, 300, 200, 150) QMainWindow.__init__(self) self.setWindowTitle("Icon Sample") self.setGeometry(300, 300, 200, 150) QToolTip.setFont(QFont("Decorative", 8, QFont.Bold)) self.setToolTip('Our Main Window') self.icon='C:\Users\Hamed\Documents\soheil sites image\imageedit__9411602959.gif' self.textEdit = QTextEdit() self.setCentralWidget(self.textEdit) self.fileName = None self.filters = "Text files (*.txt)" openFile = QAction(QIcon('open.png'), 'Open', self) openFile.setShortcut('Ctrl+O') openFile.setStatusTip('Open new File') openFile.triggered.connect(self.showDialog) menubar = self.menuBar() # fileMenu = menubar.addMenu('&File') # fileMenu.addAction(openFile) self.setGeometry(300, 300, 350, 300) self.setWindowTitle('Example - File Dialog') # self.myNameLE = QLineEdit(self) # self.myAgeLE = QLineEdit(self) # self.myChoiceLE = QLineEdit(self) self.statusLabel = QLabel('Showing Progress') self.progressBar = QProgressBar() self.progressBar.setMinimum(0) self.progressBar.setMaximum(100) ##################@@@@@@@@@@@@@@2 self.threads = [] self.addWorker(MyWorkerThread(1)) self.addWorker(MyWorkerThread(2)) #######################@@@@@@@@@@@@@ self.show() ##########################@@@@@@@@@@ def addWorker(self, worker): worker.message.connect(self.printMessage, QtCore.Qt.QueuedConnection) # connect the finished signal to method so that we are notified worker.finished.connect(self.workersFinished) self.threads.append(worker) def startWorkers(self): for worker in self.threads: worker.start() # no wait, no finished. you start the threads and leave. def workersFinished(self): if all(worker.isFinished() for worker in self.threads): # wait until all the threads finished QtCore.QCoreApplication.instance().quit() @QtCore.Slot(str) def printMessage(self, text): sys.stdout.write(text+'\n') sys.stdout.flush() ################################ def openAbout(self): aboutDialog = QtGui.QDialog(self) # aboutUi = about.About_Dialog() # aboutUi.setupUi(aboutDialog) aboutDialog.show() def newwindow(self): # w = W1() # w.show() # self.hide() # form = Form() # form.show() w2 = chooseoption.Form1(self) w2.show() import webbrowser your_swf_url='E:\soheil\web_site_root\ieee\all_functions\linux server\python GUI\Double_angle_off.swf' webbrowser.open(your_swf_url) # self.wid = QWidget() # self.wid.resize(250, 150) # self.wid.setWindowTitle('NewWindow') # self.wid.show() # self.actionAbout.triggered.connect(self.openAbout) def retranslateUi(self, Dialog): Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8)) self.aboutLbl.setText(QtGui.QApplication.translate("Dialog", "Mailer version 0.0.1 by .....", None, QtGui.QApplication.UnicodeUTF8)) def showNameDialog(self): text, ok = QInputDialog.getText(self, 'Input Text Dialog', 'Enter your name:') if ok: self.myNameLE.setText(str(text)) def showDialog(self): fileName, _ = QFileDialog.getOpenFileName(self, "Open Text Files", "c:/", "Text files(*.txt)") try: contents = open(fileName, 'r') with contents: data = contents.read() self.textEdit.setText(data) except: pass def CreateStatusBar(self): """ Function to create the status bar """ self.myStatusBar = QStatusBar() self.progressBar.setValue(10) self.myStatusBar.addWidget(self.statusLabel, 1) self.myStatusBar.addWidget(self.progressBar, 2) self.setStatusBar(self.myStatusBar) def ShowProgress(self): """ Function to show progress """ import time while(self.progressBar.value() < self.progressBar.maximum()): self.progressBar.setValue(self.progressBar.value() + 10) # time.sleep(1) self.statusLabel.setText('Ready') def SetupComponents(self): """ Function to setup status bar, central widget, menu bar """ self.myStatusBar = QStatusBar() self.setStatusBar(self.myStatusBar) self.myStatusBar.showMessage('Ready', 10000) self.textEdit = QTextEdit() self.setCentralWidget(self.textEdit) # self.CreateActions() # self.CreateMenus() # self.fileMenu.addAction(self.newAction) # self.fileMenu.addSeparator() # self.fileMenu.addAction(self.exitAction) # self.editMenu.addAction(self.copyAction) # self.fileMenu.addSeparator() # self.editMenu.addAction(self.pasteAction) # self.helpMenu.addAction(self.aboutAction) self.myStatusBar = QStatusBar() self.setStatusBar(self.myStatusBar) self.myStatusBar.showMessage('Ready', 10000) self.CreateActions() self.CreateMenus() self.CreateToolBar() self.fileMenu.addAction(self.newAction) self.fileMenu.addAction(self.openAction) self.fileMenu.addAction(self.saveAction) self.fileMenu.addSeparator() self.fileMenu.addAction(self.exitAction) self.editMenu.addAction(self.cutAction) self.editMenu.addAction(self.copyAction) self.editMenu.addAction(self.pasteAction) self.editMenu.addSeparator() self.editMenu.addAction(self.undoAction) self.editMenu.addAction(self.redoAction) self.editMenu.addAction(self.ss_image) self.editMenu.addSeparator() self.editMenu.addAction(self.selectAllAction) self.formatMenu.addAction(self.fontAction) self.helpMenu.addAction(self.aboutAction) self.helpMenu.addSeparator() self.helpMenu.addAction(self.aboutQtAction) self.mainToolBar.addAction(self.newAction) self.mainToolBar.addAction(self.openAction) self.mainToolBar.addAction(self.saveAction) self.mainToolBar.addSeparator() self.mainToolBar.addAction(self.cutAction) self.mainToolBar.addAction(self.copyAction) self.mainToolBar.addAction(self.pasteAction) self.mainToolBar.addSeparator() self.mainToolBar.addAction(self.undoAction) self.mainToolBar.addAction(self.redoAction) def openFile(self): self.fileName, self.filterName =QFileDialog.getOpenFileName(self) try: self.textEdit.setText(open(self.fileName).read()) except: pass # Slots called when the menu actions are triggered def newFile(self): self.textEdit.setText('') def exitFile(self): self.close() def aboutHelp(self): QMessageBox.about(self, "About Simple Text Editor", "This example demonstrates the use " "of Menu Bar") def fontChange(self): (font, ok) = QFontDialog.getFont(QFont("Helvetica [Cronyx]", 10), self) if ok: self.textEdit.setCurrentFont(font) def saveFile(self): if self.fileName == None or self.fileName == '': self.fileName, self.filterName = QFileDialog.getSaveFileName(self, \ filter=self.filters) if(self.fileName != ''): file = open(self.fileName, 'w') file.write(self.textEdit.toPlainText()) self.statusBar().showMessage("File saved", 2000) def image_ss(self): from PySide import QtGui, QtCore import wxpython_flash_Simple_working hbox = QtGui.QHBoxLayout(self) pixmap = QtGui.QPixmap('C:\Users\Hamed\Pictures\LED\led.jpg') lbl = QtGui.QLabel(self) lbl.setPixmap(pixmap) hbox.addWidget(lbl) self.setLayout(hbox) self.setGeometry(300, 300, 280, 170) self.setWindowTitle('Red Rock') self.show() # from PIL import Image # from PySide.QtGui import QImage, QImageReader, QLabel, QPixmap, QApplication # # im = Image.open('C:\Users\Hamed\Documents\soheil sites image\imageedit__9411602959.gif') # data = im.tostring('raw') # ##app = QApplication([]) ## image = QImage(data); # image = QImage(data, im.size[0], im.size[1], QImage.Format_ARGB32) # pix = QPixmap.fromImage(image) # lbl = QLabel() # lbl.setPixmap(pix) # lbl.show() def image_ss_main(self): from PySide import QtGui, QtCore hbox = QtGui.QHBoxLayout(self) pixmap = QtGui.QPixmap('C:\Users\Hamed\Pictures\LED\led.jpg') lbl = QtGui.QLabel(self) lbl.setPixmap(pixmap) hbox.addWidget(lbl) self.setLayout(hbox) self.setGeometry(300, 300, 280, 170) self.setWindowTitle('Red Rock') self.show() # from PIL import Image # from PySide.QtGui import QImage, QImageReader, QLabel, QPixmap, QApplication # # im = Image.open('C:\Users\Hamed\Documents\soheil sites image\imageedit__9411602959.gif') # data = im.tostring('raw') # ##app = QApplication([]) ## image = QImage(data); # image = QImage(data, im.size[0], im.size[1], QImage.Format_ARGB32) # pix = QPixmap.fromImage(image) # lbl = QLabel() # lbl.setPixmap(pix) # lbl.show( def CreateActions(self): """ Function to create actions for menus """ self.newAction = QAction( QIcon('new.png'), '&New', self, shortcut=QKeySequence.New, statusTip="Create a New File", triggered=self.newFile) self.exitAction = QAction( QIcon(self.icon), 'E&xit', self, shortcut="Ctrl+Q", statusTip="Exit the Application", triggered=self.exitFile) self.copyAction = QAction( QIcon('copy.png'), 'C&opy', self, shortcut="Ctrl+C", statusTip="Copy", triggered=self.textEdit.copy) self.pasteAction = QAction( QIcon('paste.png'), '&Paste', self, shortcut="Ctrl+V", statusTip="Paste", triggered=self.textEdit.paste) self.aboutAction = QAction( QIcon('about.png'), 'A&bout', self, statusTip="Displays info about text editor", triggered=self.aboutHelp) self.openAction = QAction( QIcon('open.png'), 'O&pen', self, shortcut=QKeySequence.Open, statusTip="Open an existing file", triggered=self.openFile) self.saveAction = QAction( QIcon('save.png'), '&Save', self, shortcut=QKeySequence.Save, statusTip="Save the current file to disk", triggered=self.saveFile) self.cutAction = QAction( QIcon('cut.png'), 'C&ut', self, shortcut=QKeySequence.Cut, statusTip="Cut the current selection to clipboard", triggered=self.textEdit.cut) self.undoAction = QAction( QIcon('undo.png'),'Undo', self, shortcut=QKeySequence.Undo, statusTip="Undo previous action", triggered=self.textEdit.undo) self.redoAction = QAction( QIcon('redo.png'),'Redo', self, shortcut=QKeySequence.Redo, statusTip="Redo previous action", triggered=self.textEdit.redo) self.selectAllAction = QAction( QIcon('selectAll.png'), 'Select All', self, statusTip="Select All", triggered=self.textEdit.selectAll) self.fontAction = QAction( 'F&ont', self, statusTip = "Modify font properties", triggered = self.fontChange) self.aboutAction = QAction( QIcon('about.png'), 'A&bout', self, statusTip="Displays info about text editor", # triggered=self.aboutHelp) triggered=self.newwindow) self.aboutQtAction = QAction("About &Qt", self, statusTip="Show the Qt library's About box", triggered=qApp.aboutQt) self.ss_image = QAction("Insert &.SWF(flash)", self, statusTip="Show the Qt library's About box", triggered=self.image_ss) self.actionAbout = QAction("image &Qt", self, statusTip="Show the Qt library's About box", triggered=self.openAbout) # Actual menu bar item creation def CreateToolBar(self): """ Function to create actual menu bar """ self.mainToolBar = self.addToolBar('Main') self.mainToolBar.addAction(self.newAction) self.mainToolBar.addSeparator() self.mainToolBar.addAction(self.copyAction) self.mainToolBar.addAction(self.pasteAction) # Actual menu bar item creation def CreateMenus(self): """ Function to create actual menu bar """ self.fileMenu = self.menuBar().addMenu("&File") self.fileMenu.addSeparator() self.editMenu = self.menuBar().addMenu("&Edit") self.helpMenu = self.menuBar().addMenu("&Help") self.formatMenu = self.menuBar().addMenu("F&ormat") def setAboutButton(self): """ Function to set About Button """ self.aboutButton = QPushButton("About", self) self.aboutButton.move(110, 100) self.aboutButton.clicked.connect(self.showAbout) def showAbout(self): """ Function to show About Box """ QMessageBox.about(self.aboutButton, "About PySide", "PySide is a cross-platform tool for generating GUI Programs.") def center(self): """ Function to center the application """ qRect = self.frameGeometry() centerPoint = QDesktopWidget().availableGeometry().center() qRect.moveCenter(centerPoint) self.move(qRect.topLeft()) def quitApp(self): """ Function to confirm a message from the user """ userInfo = QMessageBox.question(self, 'Confirmation', "This will quit the application. Do you want to Continue?", QMessageBox.Yes | QMessageBox.No) if userInfo == QMessageBox.Yes: myApp.quit() if userInfo == QMessageBox.No: pass def setIconModes(self): myIcon1 = QIcon( self.icon) myLabel1 = QLabel('sample', self) pixmap1 = myIcon1.pixmap(50, 50, QIcon.Active, QIcon.On) myLabel1.setPixmap(pixmap1) myIcon2 = QIcon( self.icon) myLabel2 = QLabel('sample', self) pixmap2 = myIcon2.pixmap(50, 50, QIcon.Disabled, QIcon.Off) myLabel2.setPixmap(pixmap2) myLabel2.move(50, 0) myIcon3 = QIcon( self.icon) myLabel3 = QLabel('sample', self) pixmap3 = myIcon3.pixmap(50, 50, QIcon.Selected, QIcon.On) myLabel3.setPixmap(pixmap3) myLabel3.move(100, 0) def setIcon(self): """ Function to set Icon """ from PySide.QtGui import QPixmap pixmap = QPixmap(r'C:\Users\Hamed\Pictures\LED\led.jpg') # appIcon = QIcon('C:\Users\Hamed\Documents\soheil sites image\imageedit__9411602959.gif') appIcon = QIcon(pixmap) self.setWindowIcon(appIcon) def setButton(self): """ Function to add a quit button """ myButton = QPushButton('Quit', self) myButton.move(20, 100) # myButton.clicked.connect(myApp.quit) myButton.clicked.connect(self.quitApp)
class MainWindow(QMainWindow): """Fenêtre principale du programme""" def __init__(self): QMainWindow.__init__(self) self.setWindowTitle("Main Window") self.setGeometry(300, 250, 400, 300) self.setWindowIcon(QIcon('Stock/appicon.png')) def setupComponent(self): """Initialise l'ensemble des éléments de l'application""" self.setupStatusBar() self.setupZoneText() self.setupMenu() self.setupToolBar() def setupStatusBar(self): """Ajoute une barre de status""" self.progressBar = QProgressBar() self.statusLabel = QLabel('Progression ...') self.progressBar.setMaximum(100) self.progressBar.setMinimum(0) self.statusBar = QStatusBar() # # Affiche un message durant 2 sec après ouverture de l'application # self.statusBar.showMessage('Please Wait ...', 2000) self.progressBar.setValue(10) self.statusBar.addWidget(self.statusLabel, 1) self.statusBar.addWidget(self.progressBar, 2) self.setStatusBar(self.statusBar) def setupZoneText(self): """Ajout du widget central (zone de texte)""" self.textEdit = QTextEdit() self.setCentralWidget(self.textEdit) def setupMenu(self): """Ajout de menus contextuels""" self.createActions() self.createMenu() self.fileMenu.addAction(self.newAction) self.fileMenu.addSeparator() self.fileMenu.addAction(self.exitAction) self.editMenu.addAction(self.copyAction) self.editMenu.addSeparator() self.editMenu.addAction(self.pasteAction) self.helpMenu.addAction(self.aboutAction) def setupToolBar(self): """Ajout de la barre d'outils""" self.mainToolBar = self.addToolBar('Main') self.mainToolBar.addAction(self.newAction) self.mainToolBar.addSeparator() self.mainToolBar.addAction(self.copyAction) self.mainToolBar.addAction(self.pasteAction) def showProgress(self): """Avancement de la barre de progression""" while self.progressBar.value() < self.progressBar.maximum(): self.progressBar.setValue(self.progressBar.value() + 10) time.sleep(1/10) # self.statusBar.showMessage('Ready', 2000) self.statusLabel.setText('Ready !!') def createMenu(self): """Création de la barre de menu avec 3 menus""" self.fileMenu = self.menuBar().addMenu('&Fichier') self.editMenu = self.menuBar().addMenu('&Edition') self.helpMenu = self.menuBar().addMenu('&About') def createActions(self): """Création des différentes actions du menu '&' permet de surligner une lettre pour acès rapide Alt+lettre 'shortcut' permet de définir le raccourci de l'action du menu 'statusTip' permet de modifier l'affichage dans la barre de status 'triggered' permet de définir l'action à réaliser""" self.newAction = QAction('&New', self, shortcut=QKeySequence.New, statusTip="Créer un nouveau fichier", triggered=self.newFile) self.exitAction = QAction('&Exit', self, shortcut="Ctrl+Q", statusTip="Quitter l'application", triggered=self.exitFile) self.copyAction = QAction('&Copy', self, shortcut="Ctrl+C", statusTip="Copier", triggered=self.textEdit.copy) self.pasteAction = QAction('&Paste', self, shortcut="Ctrl+V", statusTip="Coller", triggered=self.textEdit.paste) self.aboutAction = QAction('&About', self, statusTip="Infos à propos de l'éditeur", triggered=self.aboutHelp) def newFile(self): """Efface le contenu du widget de text""" self.textEdit.setText('') def exitFile(self): """Ferme le programme""" self.close() def aboutHelp(self): """Affiche des renseignements sur le logiciel""" QMessageBox.about(self, "About this application", "Just a simple text editor using Menu Bar")
class SafeLock(QWidget): def __init__(self): super(SafeLock, self).__init__() main_layout = QVBoxLayout(self) self.Version = '0.5 beta' self.s_error = "QStatusBar{color:red;font-weight:1000;}" self.s_loop = "QStatusBar{color:black;font-weight:1000;}" self.s_norm = "QStatusBar{color:blue;font-style:italic;" self.s_norm += "font-weight:500;}" self.Processing = None self.CP = None self.PPbar = None self.key = None self.DFiles = [] self.picon = r_path("images/favicon.png") self.plogo = r_path("images/logo.png") if name == 'nt': self.picon = r_path("images\\favicon.png") self.plogo = r_path("images\\logo.png") self.icon = QIcon(self.picon) self.logo = QIcon(self.plogo) self.center() self.setStyle() self.setMW(main_layout) self.setSB(main_layout) self.show() def db(self, password="******", dbname="untitled.sld", dc=True): eng = create_engine("sqlite:///%s" % dbname, connect_args={'check_same_thread': False}) Base = declarative_base(bind=eng) Session = sessionmaker(bind=eng) session = Session() class Identifier(Base): __tablename__ = "identifier" id = Column(Integer, primary_key=True) version = Column(Binary) kvd = Column(Binary) def __init__(self, version, kvd): self.id = 0 self.version = version self.kvd = kvd class Folder(Base): __tablename__ = 'folders' id = Column(Integer, primary_key=True) path = Column(String) def __init__(self, path="Empty"): self.path = path class File(Base): __tablename__ = 'files' id = Column(Integer, primary_key=True) name = Column(String) f_id = Column(Integer, ForeignKey('folders.id'), nullable=True) bb = Column(Binary) def __init__(self, name="empty", f_id=0, bb=1010): self.name = name self.f_id = f_id self.bb = bb if dc: Base.metadata.create_all() enc = encryptit( sha256(self.Version).digest(), sha256(password).digest()) session.add(Identifier(enc[0], enc[1])) session.commit() return [eng, Base, session, File, Folder, Identifier, password] def checkP(self, db): try: d = db[2].query(db[5]).filter_by(id=0).first() if d is not None: if isenct(self.Version, d.version, db[6], d.kvd): return True except: pass return False def setStyle(self): self.setMaximumWidth(410) self.setMinimumWidth(410) self.setMaximumHeight(370) self.setMinimumHeight(370) self.setWindowIcon(self.icon) self.activateWindow() self.setWindowTitle("safelock " + self.Version) self.setToolTip("Just drag and drop any files or folders" + " to ecrypt or a .sld file to decrypt") self.setAcceptDrops(True) self.show() def center(self): qrect = self.frameGeometry() cp = QDesktopWidget().availableGeometry().center() qrect.moveCenter(cp) self.move(qrect.topLeft()) def setMW(self, ml): ll = QVBoxLayout() self.mIcon = QLabel() self.mIcon.setAlignment(Qt.AlignCenter) mmicon = self.logo.pixmap(250, 230, QIcon.Active, QIcon.On) self.mIcon.setPixmap(mmicon) self.mInst = QLabel( "<center>(Drag and drop files or folders to encrypt them)<br>" + "(Drap and drop .sld file to decrypt it)<br>" + "<u>2GB max single file size to encrypt</u></center>") font = QFont() font.setPointSize(13) font.setBold(True) font.setWeight(75) self.fInst = QLabel('<center>| Double-Click for about |</center>') self.mInst.setFont(font) ll.addWidget(self.mIcon) ll.addWidget(self.mInst) ll.addWidget(self.fInst) ml.addLayout(ll) def setSB(self, ml): self.statusb = QStatusBar() ml.addWidget(self.statusb) def modSB(self): if self.PPbar is None: self.PPbar = True self.statusb.clear() self.pbar = QProgressBar() self.pbar.setMaximum(100) self.pbar.setMinimum(0) self.plabel = QLabel() self.statusb.addWidget(self.plabel, 0.5) self.statusb.addWidget(self.pbar, 3) else: self.PPbar = None self.statusb.removeWidget(self.plabel) self.statusb.removeWidget(self.pbar) self.statusb.clear() def saveFile(self, fl): fname, _ = QFileDialog.getSaveFileName(self, "Save encrypted file", fl, "Safelock file (*.sld)") if '.' in fname: tm = fname.split('.') tm = tm[len(tm) - 1] if tm == "sld": try: if path.isfile(fname): remove(fname) except: pass return fname if len(fname) <= 0: return None fname += ".sld" try: if path.isfile(fname): remove(fname) except: pass return fname def extTo(self, fl): fname = QFileDialog.getExistingDirectory(self, "Extract files to", fl) if len(fname) <= 0: return None return fname def getPass(self): passwd, re = QInputDialog.getText(self, "Password", "Enter password :"******"Something went wrong !"): QMessageBox.critical(self, "Error", msg) return True def aboutMsgg(self): Amsg = "<center>All credit reserved to the author of " Amsg += "safelock %s " % self.Version Amsg += ", This work is a free, open-source project licensed " Amsg += " under Mozilla Public License version 2.0 . <br><br>" Amsg += " visit for more info or report:<br> " Amsg += "<b><a href='https://safe-lock.github.io'> " Amsg += "https://safe-lock.github.io/ </a> </b></center>" QMessageBox.about(self, "About", Amsg) return True def getSession(self): self.eng = eng(self.password, self.dbname) Session = sessionmaker(bind=self.eng) self.Base = declarative_base(bind=self.eng) self.Base.metadata.create_all() self.session = Session() return self.session def dragEnterEvent(self, e): if e.mimeData().hasUrls: e.accept() else: e.ignore() def dragMoveEvent(self, e): if e.mimeData().hasUrls: e.accept() else: e.ignore() def dropEvent(self, e): if e.mimeData().hasUrls: e.setDropAction(Qt.CopyAction) e.accept() self.DFiles = [] for url in e.mimeData().urls(): try: if sysname == 'darwin': from Foundation import NSURL fname = NSURL.URLWithString_( url.toString()).filePathURL().path() else: fname = url.toLocalFile() self.DFiles.append(fname) except: pass self.dealD(self.DFiles) else: event.ignore() def in_loop(self): if self.Processing is None: self.Processing = True self.setAcceptDrops(False) self.mIcon.setEnabled(False) self.mInst.setEnabled(False) self.fInst.setText("<center>| Double-Click to cancel |</center>") self.setToolTip("Double-Click anywhere to cancel") else: self.Processing = None self.setAcceptDrops(True) self.mIcon.setEnabled(True) self.mInst.setEnabled(True) self.fInst.setText("<center>| Double-Click for about |</center>") self.setToolTip("Just drag and drop any files or folders" + " to ecrypt or a .sld file to decrypt") def dealD(self, files): def tpp(inp): a = path.basename(inp) return inp.replace(a, '') if len(files) < 1: return False elif len(files) >= 1: if len(files) == 1: tf = files[0].split('.') tf = tf[len(tf) - 1] if tf == 'sld': pw = self.getPass() if pw is None: self.errorMsg("You can't set an empty password !") return False elif not pw: return False if not self.checkP( self.db(sha256(pw).digest(), files[0], dc=False)): self.errorMsg("Wrong password entered, try again.") return False else: fold = self.extTo(tpp(files[0])) if fold is not None: self.CP = fold self.in_loop() self.P = DecryptTH(fold, self.db(pw, files[0], dc=False), sha256(pw).digest()) self.P.start() self.P.somesignal.connect(self.handleStatusMessage) self.P.setTerminationEnabled(True) return True pw = self.getPass() if pw is None: self.errorMsg("You can't set an empty password !") elif not pw: pass else: fil = self.saveFile(tpp(files[0])) if fil is not None: if path.isfile(fil): try: remove(fil) except: pass self.CP = fil self.in_loop() self.P = EncryptTH(files, self.db(pw, fil), sha256(pw).digest()) self.P.start() self.P.somesignal.connect(self.handleStatusMessage) self.P.setTerminationEnabled(True) return True @Slot(object) def handleStatusMessage(self, message): self.statusb.setStyleSheet(self.s_loop) def getIT(f, o): return int((f / o) * 100) mm = message.split('/') if mm[len(mm) - 1] == '%': if self.PPbar is None: self.modSB() self.pbar.setValue(getIT(int(mm[0]), int(mm[1]))) self.setWindowTitle("Processing : " + str(getIT(int(mm[0]), int(mm[1]))) + "%") self.plabel.setText(mm[0] + '/' + mm[1]) else: self.unsetCursor() if self.PPbar is not None: self.modSB() if message[:7] == '# Error': if self.Processing: self.in_loop() self.statusb.setStyleSheet(self.s_error) self.cleanup() elif message[:6] == '# Stop': self.statusb.setStyleSheet(self.s_error) elif message[:6] == '# Done': if self.Processing: self.in_loop() self.statusb.setStyleSheet(self.s_norm) elif message == "# Loading": self.setCursor(Qt.BusyCursor) self.statusb.setStyleSheet(self.s_norm) self.setWindowTitle('safelock ' + self.Version) self.statusb.showMessage(message) def mousePressEvent(self, event): if event.type() == QEvent.Type.MouseButtonDblClick: if self.Processing is None: self.aboutMsgg() else: self.closeEvent() def closeEvent(self, event=None): if self.Processing is not None: if event is not None: r = QMessageBox.question( self, "Making sure", "Are you sure you want to exit, during an active" + " process ?", QMessageBox.Yes | QMessageBox.No) else: r = QMessageBox.question(self, "Making sure", "Are you sure, you to cancel ?", QMessageBox.Yes | QMessageBox.No) if r == QMessageBox.Yes: self.P.stop() self.cleanup() if event is not None: self.in_loop() event.accept() else: self.in_loop() else: if event is not None: event.ignore() else: if self.CP is not None: try: if path.isfile(self.CP + '-journal'): remove(self.CP + '-journal') except: pass if event is not None: event.accept() def cleanup(self): if self.CP is not None: try: if path.isfile(self.CP + '-journal'): remove(self.CP + '-journal') if path.isfile(self.CP): remove(self.CP) except: pass
class MainWindow(QMainWindow): def __init__(self, datta): QMainWindow.__init__(self) self.setWindowTitle('Project Parser') appIcon = QIcon('search.png') self.setWindowIcon(appIcon) self.viewPortBL = QDesktopWidget().availableGeometry().topLeft() self.viewPortTR = QDesktopWidget().availableGeometry().bottomRight() self.margin = int(QDesktopWidget().availableGeometry().width()*0.1/2) self.shirina = QDesktopWidget().availableGeometry().width() - self.margin*2 self.visota = QDesktopWidget().availableGeometry().height() - self.margin*2 self.setGeometry(self.viewPortBL.x() + self.margin, self.viewPortBL.y() + self.margin, self.shirina, self.visota) # statusbar self.myStatusBar = QStatusBar() self.setStatusBar(self.myStatusBar) #lower long layout self.lowerLong = QFrame() self.detailsLabel = QLabel() self.skillsLabel = QLabel() self.urlLabel = QLabel() self.locationLabel = QLabel() self.skillsLabel.setText('skills') self.detailsLabel.setWordWrap(True) self.la = QVBoxLayout() self.la.addWidget(self.detailsLabel) self.la.addWidget(self.skillsLabel) self.la.addWidget(self.urlLabel) self.la.addWidget(self.locationLabel) self.lowerLong.setLayout(self.la) # table self.source_model = MyTableModel(self, datta, ['Id', 'Date', 'Title']) self.proxy_model = myTableProxy(self) self.proxy_model.setSourceModel(self.source_model) self.proxy_model.setDynamicSortFilter(True) self.table_view = QTableView() self.table_view.setModel(self.proxy_model) self.table_view.setAlternatingRowColors(True) self.table_view.resizeColumnsToContents() self.table_view.resizeRowsToContents() self.table_view.horizontalHeader().setStretchLastSection(True) self.table_view.setSortingEnabled(True) self.table_view.sortByColumn(2, Qt.AscendingOrder) # events self.selection = self.table_view.selectionModel() self.selection.selectionChanged.connect(self.handleSelectionChanged) #DO NOT use CreateIndex() method, use index() index = self.proxy_model.index(0,0) self.selection.select(index, QItemSelectionModel.Select) self.upperLong = self.table_view # right side widgets self.right = QFrame() self.la1 = QVBoxLayout() self.btnDownload = QPushButton('Download data') self.btnDownload.clicked.connect(self.download) self.myButton = QPushButton('Show Skillls') self.myButton.clicked.connect(self.showAllSkills) self.btnSearchByWord = QPushButton('Search by word(s)') self.btnSearchByWord.clicked.connect(self.onSearchByWord) self.btnResetFilter= QPushButton('Discard Filter') self.btnResetFilter.clicked.connect(self.discardFilter) self.btnCopyURL = QPushButton('URL to Clipboard') self.btnCopyURL.clicked.connect(self.copyToClipboard) self.btnExit = QPushButton('Exit') self.btnExit.clicked.connect(lambda: sys.exit()) self.dateTimeStamp = QLabel() self.la1.addWidget(self.btnDownload) self.la1.addSpacing(10) self.la1.addWidget(self.myButton) self.la1.addSpacing(10) self.la1.addWidget(self.btnSearchByWord) self.la1.addSpacing(10) self.la1.addWidget(self.btnResetFilter) self.la1.addSpacing(10) self.la1.addWidget(self.btnCopyURL) self.la1.addSpacing(70) self.la1.addWidget(self.btnExit) self.la1.addStretch(stretch=0) self.la1.addWidget(self.dateTimeStamp) self.right.setLayout(self.la1) self.right.setFrameShape(QFrame.StyledPanel) # splitters self.horiSplit = QSplitter(Qt.Vertical) self.horiSplit.addWidget(self.upperLong) self.horiSplit.addWidget(self.lowerLong) self.horiSplit.setSizes([self.visota/2, self.visota/2]) self.vertiSplit = QSplitter(Qt.Horizontal) self.vertiSplit.addWidget(self.horiSplit) self.vertiSplit.addWidget(self.right) self.vertiSplit.setSizes([self.shirina*3/4, self.shirina*1/4]) self.setCentralWidget(self.vertiSplit) self.settings = QSettings('elance.ini', QSettings.IniFormat) self.settings.beginGroup('DATE_STAMP') self.dateTimeStamp.setText('Data actuality: %s' % self.settings.value('date/time')) self.settings.endGroup() self.statusText = '' def handleSelectionChanged(self, selected, deselected): for index in selected.first().indexes(): #print('Row %d is selected' % index.row()) ind = index.model().mapToSource(index) desc = ind.model().mylist[ind.row()]['Description'] self.detailsLabel.setText(desc) skills = ', '.join(ind.model().mylist[ind.row()]['Skills']).strip() self.skillsLabel.setText(skills) url = ind.model().mylist[ind.row()]['URL'] self.urlLabel.setText(url) location = ind.model().mylist[ind.row()]['Location'] self.locationLabel.setText(location) def showAllSkills(self): listSkills = [] for elem in self.source_model.mylist: listSkills += elem['Skills'] allSkills = Counter(listSkills) tbl = MyTableModel(self, allSkills.items(), ['Skill', 'Freq']) win = skillsWindow(tbl, self.table_view) win.exec_() def discardFilter(self): self.table_view.model().emit(SIGNAL("modelAboutToBeReset()")) self.table_view.model().criteria = {} self.table_view.model().emit(SIGNAL("modelReset()")) self.table_view.resizeRowsToContents() def download(self): self.btnDownload.setDisabled(True) self.statusLabel = QLabel('Connecting') self.progressBar = QProgressBar() self.progressBar.setMinimum(0) self.progressBar.setMaximum(100) self.myStatusBar.addWidget(self.statusLabel, 2) self.myStatusBar.addWidget(self.progressBar, 1) self.progressBar.setValue(1) self.settings.beginGroup('URLS') initialLink = self.settings.value('CategoriesDetailed/VahaSelected/InitialLink') pagingLink = self.settings.value('CategoriesDetailed/VahaSelected/PagingLink') self.settings.endGroup() downloader = Downloader(initialLink, pagingLink, 25, 5) downloader.messenger.downloadProgressChanged.connect(self.onDownloadProgressChanged) downloader.messenger.downloadComplete.connect(self.onDownloadComplete) downloader.download() def onDownloadComplete(self): #QMessageBox.information(self, 'Download complete', 'Download complete!', QMessageBox.Ok) self.table_view.model().emit(SIGNAL("modelAboutToBeReset()")) self.settings.beginGroup('DATE_STAMP') self.settings.setValue('date/time', time.strftime('%d-%b-%Y, %H:%M:%S')) self.dateTimeStamp.setText('Data actuality: %s' % self.settings.value('date/time')) self.settings.endGroup() with open("elance.json") as json_file: jobDB = json.load(json_file) for elem in jobDB: words = nltk.tokenize.regexp_tokenize(elem['Title'].lower(), r'\w+') elem['Tokens'] = words elem['Skills'] = [t.strip() for t in elem['Skills'].split(',')] self.source_model.mylist = jobDB self.table_view.model().emit(SIGNAL("modelReset()")) self.btnDownload.setEnabled(True) self.myStatusBar.removeWidget(self.statusLabel) self.myStatusBar.removeWidget(self.progressBar) self.myStatusBar.showMessage(self.statusText, timeout = 5000) def onDownloadProgressChanged(self, stata): self.progressBar.setValue(stata[2]) #text = 'Processed records{:5d} of{:5d}'.format(percentage[0], percentage[1]) bajtikov = '{:,}'.format(stata[5]) self.statusText = 'Processed page{:4d} of{:4d}. \ Job entries{:5d} of{:5d}. \ Downloaded{:>12s} Bytes'.format(stata[3], stata[4], stata[0], stata[1], bajtikov) self.statusLabel.setText(self.statusText) def copyToClipboard(self): clipboard = QApplication.clipboard() clipboard.setText(self.urlLabel.text()) self.myStatusBar.showMessage(self.urlLabel.text(), timeout = 3000) def onSearchByWord(self): text, ok = QInputDialog.getText(self, 'Search the base by word(s)', 'Enter your keyword/phrase to search for:') if ok: words = [t.strip() for t in nltk.tokenize.regexp_tokenize(text.lower(), r'\w+')] self.table_view.model().emit(SIGNAL("modelAboutToBeReset()")) self.table_view.model().criteria = {'Description' : words} self.table_view.model().emit(SIGNAL("modelReset()"))
def main(): """Execute QDarkStyle example.""" parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument('--qt_from', default='qtpy', choices=['pyqt', 'pyqt5', 'pyside','pyside2', 'qtpy', 'pyqtgraph'], help="Choose which wrapper/framework is to be used to run the example.", type=str) parser.add_argument('--no_dark', action='store_true', help="Exihibts the original window (without qdarkstyle).") parser.add_argument('--test', action='store_true', help="Auto close window after 2s.") parser.add_argument('--reset', action='store_true', help="Reset GUI settings (position, size).") parser.add_argument('--screenshots', action='store_true', help="Generate screenshots.") # parsing arguments from command line args = parser.parse_args() # set log for debug logging.basicConfig(level=logging.DEBUG) # to avoid problems when testing without screen if args.test: os.environ['QT_QPA_PLATFORM']='offscreen' if args.qt_from == 'pyside': # using PySide wrapper from PySide.QtGui import QApplication, QMainWindow, QDockWidget, QStatusBar, QLabel, QPushButton from PySide.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize # import examples UI according to wrapper from ui.mw_menus_pyside_ui import Ui_MainWindow as ui_main from ui.dw_buttons_pyside_ui import Ui_DockWidget as ui_buttons from ui.dw_displays_pyside_ui import Ui_DockWidget as ui_displays from ui.dw_inputs_fields_pyside_ui import Ui_DockWidget as ui_inputs_fields from ui.dw_inputs_no_fields_pyside_ui import Ui_DockWidget as ui_inputs_no_fields from ui.dw_widgets_pyside_ui import Ui_DockWidget as ui_widgets from ui.dw_views_pyside_ui import Ui_DockWidget as ui_views from ui.dw_containers_tabs_pyside_ui import Ui_DockWidget as ui_containers_tabs from ui.dw_containers_no_tabs_pyside_ui import Ui_DockWidget as ui_containers_no_tabs # Getting style style_method = qdarkstyle.load_stylesheet_pyside elif args.qt_from == 'pyqt': # using PyQt4 wrapper from PyQt4.QtGui import QApplication, QMainWindow, QDockWidget, QStatusBar, QLabel, QPushButton from PyQt4.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize # import examples UI according to wrapper from ui.mw_menus_pyqt_ui import Ui_MainWindow as ui_main from ui.dw_buttons_pyqt_ui import Ui_DockWidget as ui_buttons from ui.dw_displays_pyqt_ui import Ui_DockWidget as ui_displays from ui.dw_inputs_fields_pyqt_ui import Ui_DockWidget as ui_inputs_fields from ui.dw_inputs_no_fields_pyqt_ui import Ui_DockWidget as ui_inputs_no_fields from ui.dw_widgets_pyqt_ui import Ui_DockWidget as ui_widgets from ui.dw_views_pyqt_ui import Ui_DockWidget as ui_views from ui.dw_containers_tabs_pyqt_ui import Ui_DockWidget as ui_containers_tabs from ui.dw_containers_no_tabs_pyqt_ui import Ui_DockWidget as ui_containers_no_tabs # Getting style style_method = qdarkstyle.load_stylesheet_pyqt elif args.qt_from == 'pyqt5': # using PyQt5 wrapper from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QStatusBar, QLabel, QPushButton from PyQt5.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize # import examples UI according to wrapper from ui.mw_menus_pyqt5_ui import Ui_MainWindow as ui_main from ui.dw_buttons_pyqt5_ui import Ui_DockWidget as ui_buttons from ui.dw_displays_pyqt5_ui import Ui_DockWidget as ui_displays from ui.dw_inputs_fields_pyqt5_ui import Ui_DockWidget as ui_inputs_fields from ui.dw_inputs_no_fields_pyqt5_ui import Ui_DockWidget as ui_inputs_no_fields from ui.dw_widgets_pyqt5_ui import Ui_DockWidget as ui_widgets from ui.dw_views_pyqt5_ui import Ui_DockWidget as ui_views from ui.dw_containers_tabs_pyqt5_ui import Ui_DockWidget as ui_containers_tabs from ui.dw_containers_no_tabs_pyqt5_ui import Ui_DockWidget as ui_containers_no_tabs # Getting style style_method = qdarkstyle.load_stylesheet_pyqt5 elif args.qt_from == 'pyside2': # using PyQt5 wrapper from PySide2.QtWidgets import QApplication, QMainWindow, QDockWidget, QStatusBar, QLabel, QPushButton from PySide2.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize # import examples UI according to wrapper from ui.mw_menus_pyside2_ui import Ui_MainWindow as ui_main from ui.dw_buttons_pyside2_ui import Ui_DockWidget as ui_buttons from ui.dw_displays_pyside2_ui import Ui_DockWidget as ui_displays from ui.dw_inputs_fields_pyside2_ui import Ui_DockWidget as ui_inputs_fields from ui.dw_inputs_no_fields_pyside2_ui import Ui_DockWidget as ui_inputs_no_fields from ui.dw_widgets_pyside2_ui import Ui_DockWidget as ui_widgets from ui.dw_views_pyside2_ui import Ui_DockWidget as ui_views from ui.dw_containers_tabs_pyside2_ui import Ui_DockWidget as ui_containers_tabs from ui.dw_containers_no_tabs_pyside2_ui import Ui_DockWidget as ui_containers_no_tabs # Getting style style_method = qdarkstyle.load_stylesheet_pyside2 elif args.qt_from == 'qtpy': # using QtPy API from qtpy.QtWidgets import QApplication, QMainWindow, QDockWidget, QStatusBar, QLabel, QPushButton from qtpy.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize # import examples UI according to wrapper from ui.mw_menus_qtpy_ui import Ui_MainWindow as ui_main from ui.dw_buttons_qtpy_ui import Ui_DockWidget as ui_buttons from ui.dw_displays_qtpy_ui import Ui_DockWidget as ui_displays from ui.dw_inputs_fields_qtpy_ui import Ui_DockWidget as ui_inputs_fields from ui.dw_inputs_no_fields_qtpy_ui import Ui_DockWidget as ui_inputs_no_fields from ui.dw_widgets_qtpy_ui import Ui_DockWidget as ui_widgets from ui.dw_views_qtpy_ui import Ui_DockWidget as ui_views from ui.dw_containers_tabs_qtpy_ui import Ui_DockWidget as ui_containers_tabs from ui.dw_containers_no_tabs_qtpy_ui import Ui_DockWidget as ui_containers_no_tabs # Getting style style_method = qdarkstyle.load_stylesheet_from_environment elif args.qt_from == 'pyqtgraph': # using PyQtGraph API from pyqtgraph.Qt.QtGui import QApplication, QMainWindow, QDockWidget, QStatusBar, QLabel, QPushButton from pyqtgraph.Qt.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize #from pyqtgraph.Qt import QtGui, QtCore # import examples UI according to wrapper from ui.mw_menus_pyqtgraph_ui import Ui_MainWindow as ui_main from ui.dw_buttons_pyqtgraph_ui import Ui_DockWidget as ui_buttons from ui.dw_displays_pyqtgraph_ui import Ui_DockWidget as ui_displays from ui.dw_inputs_fields_pyqtgraph_ui import Ui_DockWidget as ui_inputs_fields from ui.dw_inputs_no_fields_pyqtgraph_ui import Ui_DockWidget as ui_inputs_no_fields from ui.dw_widgets_pyqtgraph_ui import Ui_DockWidget as ui_widgets from ui.dw_views_pyqtgraph_ui import Ui_DockWidget as ui_views from ui.dw_containers_tabs_pyqtgraph_ui import Ui_DockWidget as ui_containers_tabs from ui.dw_containers_no_tabs_pyqtgraph_ui import Ui_DockWidget as ui_containers_no_tabs # Getting style style_method = lambda: qdarkstyle.load_stylesheet_from_environment(is_pyqtgraph=True) if args.no_dark: style = '' def write_settings(window): """Get window settings and write it into a file.""" settings = QSettings('QDarkStyle', 'QDarkStyle Example') settings.setValue('pos', window.pos()) settings.setValue('size', window.size()) settings.setValue('state', window.saveState()) def read_settings(window, reset=False): """Read and set window settings from a file.""" settings = QSettings('QDarkStyle', 'QDarkStyle Example') if args.qt_from == 'pyside' or args.qt_from == 'pyside2': pos = settings.value('pos', window.pos()) size = settings.value('size', window.size()) state = settings.value('state', window.saveState()) else: pos = settings.value('pos', window.pos(), type='QPoint') size = settings.value('size', window.size(), type='QSize') state = settings.value('state', window.saveState(), type='QByteArray') if not reset: window.restoreState(state) window.resize(size) window.move(pos) # create the application app = QApplication(sys.argv) app.setOrganizationName('QDarkStyle') app.setApplicationName('QDarkStyle Example') # setup stylesheet style = style_method() app.setStyleSheet(style) # create main window window = QMainWindow() window.setObjectName('mainwindow') ui = ui_main() ui.setupUi(window) window.setWindowTitle("QDarkStyle v." + qdarkstyle.__version__) # create docks for buttons dw_buttons = QDockWidget() dw_buttons.setObjectName('buttons') ui_buttons = ui_buttons() ui_buttons.setupUi(dw_buttons) window.addDockWidget(Qt.RightDockWidgetArea, dw_buttons) # create docks for buttons dw_displays = QDockWidget() dw_displays.setObjectName('displays') ui_displays = ui_displays() ui_displays.setupUi(dw_displays) window.addDockWidget(Qt.RightDockWidgetArea, dw_displays) # create docks for inputs - no fields dw_inputs_no_fields = QDockWidget() dw_inputs_no_fields.setObjectName('inputs_no_fields') ui_inputs_no_fields = ui_inputs_no_fields() ui_inputs_no_fields.setupUi(dw_inputs_no_fields) window.addDockWidget(Qt.RightDockWidgetArea, dw_inputs_no_fields) # create docks for inputs - fields dw_inputs_fields = QDockWidget() dw_inputs_fields.setObjectName('_fields') ui_inputs_fields = ui_inputs_fields() ui_inputs_fields.setupUi(dw_inputs_fields) window.addDockWidget(Qt.RightDockWidgetArea, dw_inputs_fields) # create docks for widgets dw_widgets = QDockWidget() dw_widgets.setObjectName('widgets') ui_widgets = ui_widgets() ui_widgets.setupUi(dw_widgets) window.addDockWidget(Qt.LeftDockWidgetArea, dw_widgets) # create docks for views dw_views = QDockWidget() dw_views.setObjectName('views') ui_views = ui_views() ui_views.setupUi(dw_views) window.addDockWidget(Qt.LeftDockWidgetArea, dw_views) # create docks for containers - no tabs dw_containers_no_tabs = QDockWidget() dw_containers_no_tabs.setObjectName('containers_no_tabs') ui_containers_no_tabs = ui_containers_no_tabs() ui_containers_no_tabs.setupUi(dw_containers_no_tabs) window.addDockWidget(Qt.LeftDockWidgetArea, dw_containers_no_tabs) # create docks for containters - tabs dw_containers_tabs = QDockWidget() dw_containers_tabs.setObjectName('containers') ui_containers_tabs = ui_containers_tabs() ui_containers_tabs.setupUi(dw_containers_tabs) window.addDockWidget(Qt.LeftDockWidgetArea, dw_containers_tabs) # tabify right docks window.tabifyDockWidget(dw_buttons, dw_displays) window.tabifyDockWidget(dw_displays, dw_inputs_fields) window.tabifyDockWidget(dw_inputs_fields, dw_inputs_no_fields) # tabify right docks window.tabifyDockWidget(dw_containers_no_tabs, dw_containers_tabs) window.tabifyDockWidget(dw_containers_tabs, dw_widgets) window.tabifyDockWidget(dw_widgets, dw_views) # issues #9120, #9121 on Spyder qstatusbar = QStatusBar() qstatusbar.addWidget(QLabel('Issue Spyder #9120, #9121 - background not matching.')) qstatusbar.addWidget(QPushButton('OK')) window.setStatusBar(qstatusbar) # auto quit after 2s when testing on travis-ci if args.test: QTimer.singleShot(2000, app.exit) # run read_settings(window, args.reset) window.showMaximized() # Save screenshots for differents displays and quit if args.screenshots: window.showFullScreen() QTimer.singleShot(1000, lambda: create_screenshots(app, window, not args.no_dark)) app.exec_() write_settings(window)