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 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 setIconModes(self): myIcon1 = QIcon('iconos/prueba.png') myLabel1 = QLabel('sample', self) pixmap1 = myIcon1.pixmap(50, 50, QIcon.Active, QIcon.On) myLabel1.setPixmap(pixmap1) myLabel1.setToolTip('Active Icon') myIcon2 = QIcon('iconos/prueba.png') myLabel2 = QLabel('sample', self) pixmap2 = myIcon2.pixmap(50, 50, QIcon.Disabled, QIcon.Off) myLabel2.setPixmap(pixmap2) myLabel2.move(50, 0) myLabel2.setToolTip('Disabled Icon') myIcon3 = QIcon('iconos/prueba.png') myLabel3 = QLabel('sample', self) pixmap3 = myIcon3.pixmap(50, 50, QIcon.Selected, QIcon.On) myLabel3.setPixmap(pixmap3) myLabel3.move(100, 0) myLabel3.setToolTip('Selected Icon')
def setIconMode(self): myIcon1 = QIcon('pyside_logo.png') myLabel1 = QLabel('sample', self) pixmap1 = myIcon1.pixmap(50, 50, QIcon.Active, QIcon.On) myLabel1.setPixmap(pixmap1) myLabel1.setToolTip('Active') myIcon2 = QIcon('pyside_logo.png') myLabel2 = QLabel('sample', self) pixmap2 = myIcon2.pixmap(50, 50, QIcon.Disabled, QIcon.Off) myLabel2.setPixmap(pixmap2) myLabel2.move(50, 0) myLabel2.setToolTip('Disabled') myIcon3 = QIcon('pyside_logo.png') myLabel3 = QLabel('sample', self) pixmap3 = myIcon3.pixmap(50, 50, QIcon.Selected, QIcon.On) myLabel3.setPixmap(pixmap3) myLabel3.move(100, 0) myLabel3.setToolTip('Selected')
def ponerImagen(self, img): Imagen = QIcon(img) Label = QLabel(os.path.basename(img), self) pixmapImagen = Imagen.pixmap(50,50) Label.setPixmap(pixmapImagen) self.ponerIcono(img)
class NewWindow(QWidget): def __init__(self, app=None): super(NewWindow, self).__init__() self.app = app glo = QVBoxLayout(self) icp = r_path(solve_path('static/images/favicon.png')) # need to used objective message boxs instead of functions to set font self.Arial = QFont("", 12, QFont.Bold) self.Arials = QFont("", 10, QFont.Bold) # Language support variable self.Language = 'en' self.Runningo = False icon = QIcon(icp) self.SelfIinit(icon) self.center() self.langsList(glo) self.set_Abutton(icp, glo) self.Lists(glo) self.Flabel(glo) self.set_button(glo) self.setLayout(glo) mip = self.slchange() self.P = rwser(mip[1].split(',')[1], mip[0], self.app) self.activateWindow() self.show() def SelfIinit(self, icon): self.setWindowTitle('Free Queue Manager ' + version) self.setGeometry(300, 300, 200, 150) self.setMinimumWidth(500) self.setMaximumWidth(500) self.setMinimumHeight(400) self.setMaximumHeight(400) # Setting Icon self.setWindowIcon(icon) QToolTip.setFont(self.Arials) def Flabel(self, glo): fontt = self.Arial self.ic1 = QIcon(r_path(solve_path('static/images/pause.png'))) self.l = QLabel('Icond', self) self.ic1 = self.ic1.pixmap(70, 70, QIcon.Active, QIcon.On) self.l.setPixmap(self.ic1) self.l.setAlignment(Qt.AlignCenter | Qt.AlignHCenter) self.l.setFont(fontt) self.t = QLabel('Texted', self) self.t.setText(self.getTrans('11')) self.t.setOpenExternalLinks(True) self.t.setAlignment(Qt.AlignCenter | Qt.AlignHCenter) self.t.setFont(fontt) self.t.setToolTip(self.getTrans('9')) self.l.setToolTip(self.getTrans('9')) glo.addStretch() glo.addWidget(self.l) glo.addWidget(self.t) glo.addStretch() def langsList(self, glo): self.langs = { # languages to be displayed in select 'en': 'English', 'ar': 'Arabic', 'fr': 'French', 'it': 'Italian', 'es': 'Spanish' } self.langs_list = QComboBox() self.langs_list.addItems(list(self.langs.values())) self.langs_list.setCurrentIndex(1) self.langs_list.setToolTip(self.getTrans('1')) self.langs_list.currentIndexChanged.connect(self.langChange) glo.addWidget(self.langs_list) def langChange (self): self.language = list(self.langs.keys())[self.langs_list.currentIndex()] self.langs_list.setToolTip(self.getTrans('1')) self.Amsgb = self.getTrans('2') self.abutton.setToolTip( self.getTrans('2') ) self.mbutton.setText(self.getTrans('3')) self.mbutton.setToolTip(self.getTrans('4')) self.mbutton2.setText(self.getTrans('5')) self.mbutton2.setToolTip(self.getTrans('6')) self.sl.setToolTip( self.getTrans('7') ) self.sl2.setToolTip(self.getTrans('8')) self.t.setToolTip(self.getTrans('9')) self.l.setToolTip(self.getTrans('9')) if self.Runningo: pp = self.slchange() addr = self.getTrans('10') addr += u"<a href='http://" addr += pp[1].split(',')[1] + u":" + pp[0] addr += u"'> http://" + pp[1].split(',')[1] + u":" + pp[0] addr += u"</a>" self.t.setText(addr) else: self.t.setText(self.getTrans('11')) def getTrans(self, index): lang = list(self.langs.keys())[self.langs_list.currentIndex()] try: return LANGUAGES[lang][index] except Exception: return None def Lists(self, glo): ips = self.get_ips() self.sl = QComboBox() self.sl.addItems(ips) self.sl.setToolTip(self.getTrans('7')) self.sl2 = QComboBox() self.get_ports() self.sl2.setToolTip('8') self.sl.currentIndexChanged.connect(self.get_ports) glo.addWidget(self.sl) glo.addWidget(self.sl2) def get_ports(self, nauto=True): d_ports = ['5000', '8080', '3000', '80', '9931'] m_ports = [] while len(m_ports) < 10: mip = self.slchange() for p in d_ports: s = socket(AF_INET, SOCK_STREAM) try: s.bind((mip[1].split(',')[1], int(p))) s.close() m_ports.append(p) except: s.close() d_ports.remove(p) s = socket(AF_INET, SOCK_STREAM) p = randint(1000, 9999) try: s.bind((mip[1].split(',')[1], p)) s.close() m_ports.append(str(p)) except: s.close() if len(m_ports) >= 10: break self.sl2.clear() self.sl2.addItems(m_ports) def slchange(self): return [self.sl2.currentText(), self.sl.currentText()] def set_button(self, glo): hlayout = QHBoxLayout() self.mbutton = QPushButton('Start', self) self.mbutton.clicked.connect(self.s_server) self.mbutton.setFont(self.Arials) self.mbutton.setIcon(QPixmap(r_path(solve_path('static/images/play.png')))) self.mbutton2 = QPushButton('Stop', self) self.mbutton2.clicked.connect(self.st_server) self.mbutton2.setIcon(QPixmap(r_path(solve_path('static/images/pause.png')))) self.mbutton.setToolTip(self.getTrans('4')) self.mbutton2.setToolTip(self.getTrans('6')) self.mbutton2.setEnabled(False) self.mbutton2.setFont(self.Arials) hlayout.addWidget(self.mbutton) hlayout.addWidget(self.mbutton2) glo.addLayout(hlayout) def s_server(self): mip = self.slchange() self.P = rwser(mip[1].split(',')[1], mip[0], self.app) self.P.setTerminationEnabled(True) if not self.P.isRunning(): try: self.pport = mip[0] self.mbutton.setEnabled(False) self.mbutton2.setEnabled(True) self.sl.setEnabled(False) self.sl2.setEnabled(False) self.ic1 = QIcon(r_path(solve_path('static/images/play.png'))) self.ic1 = self.ic1.pixmap(70, 70, QIcon.Active, QIcon.On) self.l.setPixmap(self.ic1) pp = self.slchange() addr = self.getTrans('10') addr += "<a href='http://" addr += pp[1].split(',')[1] + ":" + pp[0] addr += "'> http://" + pp[1].split(',')[1] + ":" + pp[0] addr += "</a>" self.t.setText(addr) self.t.setFont(self.Arial) self.P.start() self.Runningo = True except: self.eout() else: self.eout() def st_server(self): if self.P.isRunning(): try: if self.P.isRunning: self.P.stop() self.mbutton.setEnabled(True) self.mbutton2.setEnabled(False) self.sl.setEnabled(True) self.sl2.setEnabled(True) self.t.setText(self.getTrans('11')) # removing the last used port to avoid termination error cind = self.sl2.currentIndex() self.sl2.removeItem(cind) self.get_ports() self.Runningo = False except: self.eout() else: self.eout() def set_Abutton(self, icon, glo): def show_about(nself): Amsg = u" <center> " Amsg += self.getTrans('12') + version + u" " Amsg += self.getTrans('13') Amsg += self.getTrans('14') Amsg += self.getTrans('15') Amsg += u"<br> <b><a href='https://fqms.github.io/'>" Amsg += u"https://fqms.github.io </a> </b></center>" Amsgb = self.getTrans('2') return QMessageBox.about( self, Amsgb, Amsg) self.abutton = QPushButton('', self) self.abutton.setIcon(QPixmap(icon)) self.abutton.setIconSize(QSize(150, 70)) self.abutton.setToolTip(self.getTrans('2')) self.abutton.clicked.connect(partial(show_about, self)) glo.addWidget(self.abutton) def closeEvent(self, event=None): if self.Runningo: response = self.msgApp( self.getTrans('16'), self.getTrans('17')) if response == 'y': if event is not None: event.accept() if self.P.isRunning(): self.P.stop() sys.exit(0) else: if event is not None: event.ignore() else: if event is not None: event.accept() if self.P.isRunning(): self.P.stop() sys.exit(0) def msgApp(self, title, msg): uinfo = QMessageBox.question(self, title, msg, QMessageBox.Yes | QMessageBox.No) if uinfo == QMessageBox.Yes: return 'y' if uinfo == QMessageBox.No: return 'n' def eout(self): if self.P.isRunning(): self.P.stop() msgg = u"<center>" msgg += self.getTrans('18') msgg += self.getTrans('19') msgg += u"<br><b><a href='https://fqms.github.io/'> " msgg += u"https://fqms.github.io </a></b> </center>" mm = QMessageBox.critical( self, self.getTrans('20'), msgg, QMessageBox.Ok) def center(self): qrect = self.frameGeometry() cp = QDesktopWidget().availableGeometry().center() qrect.moveCenter(cp) self.move(qrect.topLeft()) def get_ips(self): il = [] for i in interfaces(): try: if os.name != 'nt': inf = i + " ," else: inf = ' ,' inf += ifaddresses(i)[2][0].get('addr') il.append(inf) except: pass return il
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
def testQIconCtorWithNone(self): icon = QIcon(None) pixmap = icon.pixmap(48, 48) self.app.exec_()
class NewWindow(QWidget): def __init__(self, app=None): super(NewWindow, self).__init__() self.app = app glo = QVBoxLayout(self) if os.name == 'nt': icp = r_path('static\\images\\favicon.png') else: icp = r_path('static/images/favicon.png') # need to used objective message boxs instead of functions to set font self.Arial = QFont("", 15, QFont.Bold) self.Arials = QFont("", 10, QFont.Bold) # Language support varibels used by translate func self.Arabic = None self.Runningo = False icon = QIcon(icp) self.SelfIinit(icon) self.center() self.Llists(glo) self.set_Abutton(icp, glo) self.Lists(glo) self.Flabel(glo) self.set_button(glo) self.setLayout(glo) mip = self.slchange() self.P = rwser(mip[1].split(',')[1], mip[0], self.app) self.activateWindow() self.show() def SelfIinit(self, icon): self.setWindowTitle('Free Queue Manager ' + version) self.setGeometry(300, 300, 200, 150) self.setMinimumWidth(500) self.setMaximumWidth(500) self.setMinimumHeight(400) self.setMaximumHeight(400) # Setting Icon self.setWindowIcon(icon) QToolTip.setFont(self.Arials) def Flabel(self, glo): fontt = self.Arial if os.name == 'nt': self.ic1 = QIcon(r_path('static\\images\\pause.png')) else: self.ic1 = QIcon(r_path('static/images/pause.png')) self.l = QLabel('Icond', self) self.ic1 = self.ic1.pixmap(70, 70, QIcon.Active, QIcon.On) self.l.setPixmap(self.ic1) self.l.setAlignment(Qt.AlignCenter | Qt.AlignHCenter) self.l.setFont(fontt) self.t = QLabel('Texted', self) self.t.setText("Server is <u> Not running </u> <br>") self.t.setOpenExternalLinks(True) self.t.setAlignment(Qt.AlignCenter | Qt.AlignHCenter) self.t.setFont(fontt) self.t.setToolTip('Status of the server') self.l.setToolTip('Status of the server') glo.addStretch() glo.addWidget(self.l) glo.addWidget(self.t) glo.addStretch() def Lists(self, glo): ips = self.get_ips() self.sl = QComboBox() self.sl.addItems(ips) self.sl.setToolTip( 'Select network interface with ip, so the server runs on it') self.sl2 = QComboBox() self.get_ports() self.sl2.setToolTip('Select a port, so server runs through it') self.sl.currentIndexChanged.connect(self.get_ports) glo.addWidget(self.sl) glo.addWidget(self.sl2) def get_ports(self, nauto=True): d_ports = ['5000', '8080', '3000', '80', '9931'] m_ports = [] while len(m_ports) < 10: mip = self.slchange() for p in d_ports: s = socket(AF_INET, SOCK_STREAM) try: s.bind((mip[1].split(',')[1], int(p))) s.close() m_ports.append(p) except: s.close() d_ports.remove(p) s = socket(AF_INET, SOCK_STREAM) p = randint(1000, 9999) try: s.bind((mip[1].split(',')[1], p)) s.close() m_ports.append(str(p)) except: s.close() if len(m_ports) >= 10: break self.sl2.clear() self.sl2.addItems(m_ports) def Llists(self, glo): hlayout = QHBoxLayout() self.lebutton = QPushButton('English', self) self.lebutton.setToolTip('Change language to English') self.lebutton.setEnabled(False) self.lebutton.setFont(self.Arials) self.labutton = QPushButton('Arabic', self) self.labutton.setFont(self.Arials) if os.name == 'nt': self.lebutton.setIcon( QPixmap(r_path('static\\images\\english.png'))) self.labutton.setIcon(QPixmap( r_path('static\\images\\arabic.png'))) else: self.lebutton.setIcon(QPixmap(r_path('static/images/english.png'))) self.labutton.setIcon(QPixmap(r_path('static/images/arabic.png'))) self.labutton.setToolTip('Change language to Arabic') self.labutton.setEnabled(True) self.lebutton.clicked.connect(partial(self.translate, ar=False)) self.labutton.clicked.connect(self.translate) hlayout.addWidget(self.lebutton) hlayout.addWidget(self.labutton) glo.addLayout(hlayout) def slchange(self): return [self.sl2.currentText(), self.sl.currentText()] def set_button(self, glo): hlayout = QHBoxLayout() self.mbutton = QPushButton('Start', self) self.mbutton.clicked.connect(self.s_server) self.mbutton.setFont(self.Arials) if os.name == 'nt': self.mbutton.setIcon(QPixmap(r_path('static\\images\\play.png'))) else: self.mbutton.setIcon(QPixmap(r_path('static/images/play.png'))) self.mbutton2 = QPushButton('Stop', self) self.mbutton2.clicked.connect(self.st_server) if os.name == 'nt': self.mbutton2.setIcon(QPixmap(r_path('static\\images\\pause.png'))) else: self.mbutton2.setIcon(QPixmap(r_path('static/images/pause.png'))) self.mbutton.setToolTip('Start the server') self.mbutton2.setToolTip('Stop the server') self.mbutton2.setEnabled(False) self.mbutton2.setFont(self.Arials) hlayout.addWidget(self.mbutton) hlayout.addWidget(self.mbutton2) glo.addLayout(hlayout) def s_server(self): mip = self.slchange() self.P = rwser(mip[1].split(',')[1], mip[0], self.app) self.P.setTerminationEnabled(True) if not self.P.isRunning(): try: self.pport = mip[0] self.mbutton.setEnabled(False) self.mbutton2.setEnabled(True) self.sl.setEnabled(False) self.sl2.setEnabled(False) if os.name == 'nt': self.ic1 = QIcon(r_path('static\\images\\play.png')) else: self.ic1 = QIcon(r_path('static/images/play.png')) self.ic1 = self.ic1.pixmap(70, 70, QIcon.Active, QIcon.On) self.l.setPixmap(self.ic1) if self.Arabic is None: pp = self.slchange() addr = "Server is <u>Running</u> <br>" addr += " On : <a href='http://" addr += pp[1].split(',')[1] + ":" + pp[0] addr += "'> http://" + pp[1].split(',')[1] + ":" + pp[0] addr += "</a>" self.t.setText(addr) self.t.setFont(self.Arial) else: pp = self.slchange() addr = u"الخدمة <u>مشغــلة</u> و تبث على : <br>" addr += u"<a href='http://" addr += pp[1].split(',')[1] + u":" + pp[0] addr += u"'> http://" + pp[1].split(',')[1] + u":" + pp[0] addr += u"</a>" self.t.setText(addr) self.t.setFont(self.Arial) self.P.start() self.Runningo = True except: self.eout() else: self.eout() def st_server(self): if self.P.isRunning(): try: if self.P.isRunning: self.P.stop() self.mbutton.setEnabled(True) self.mbutton2.setEnabled(False) self.sl.setEnabled(True) self.sl2.setEnabled(True) if self.Arabic is None: self.t.setText("Server is <u> Not running </u> <br>") else: self.t.setText(u"الــخـدمة <u>متــوقفــة</u><br>") # removing the last used port to avoid termination error cind = self.sl2.currentIndex() self.sl2.removeItem(cind) self.get_ports() self.Runningo = False except: self.eout() else: self.eout() def set_Abutton(self, icon, glo): def show_about(nself): if nself.Arabic is None: Amsg = "<center>All credit reserved to the author of FQM " Amsg += " version " + version Amsg += ", This work is a free, open-source project licensed " Amsg += " under Mozilla Public License version 2.0 . <br><br>" Amsg += " visit us for more infos and how-tos :<br> " Amsg += "<b><a href='https://fqms.github.io/'> " Amsg += "https://fqms.github.io/ </a> </b></center>" Amsgb = "About FQM" else: Amsg = u" <center> " Amsg += u" إدارة الحشود الحر النسخة " + version + u" " Amsg += u"حقوق نشر هذا البرنامج محفوظة و تخضع " Amsg += u" لرخصة البرامج الحرة و مفتوحة المصدر " Amsg += u" Mozilla Public License version 2.0 . " Amsg += u"<br><br> " Amsg += u"للمزيد من المعلومات و الشروحات , قم بزيارة :" Amsg += u"<br> <b><a href='https://fqms.github.io/'>" Amsg += u"https://fqms.github.io </a> </b></center>" Amsgb = u"عن النظام" return QMessageBox.about(self, Amsgb, Amsg) self.abutton = QPushButton('', self) self.abutton.setIcon(QPixmap(icon)) self.abutton.setIconSize(QSize(150, 70)) self.abutton.setToolTip('About FQM') self.abutton.clicked.connect(partial(show_about, self)) glo.addWidget(self.abutton) def closeEvent(self, event=None): if self.Runningo: if self.Arabic is None: response = self.msgApp( "Exiting while running", "Are you really sure, you want to exit ?") else: response = self.msgApp( u"تأكيد الخروج", u"تريد بالفعل , الخروج و إيقاف البرنامج ؟") if response == 'y': if event is not None: event.accept() if self.P.isRunning(): self.P.stop() sys.exit(0) else: if event is not None: event.ignore() else: if event is not None: event.accept() if self.P.isRunning(): self.P.stop() sys.exit(0) def msgApp(self, title, msg): uinfo = QMessageBox.question(self, title, msg, QMessageBox.Yes | QMessageBox.No) if uinfo == QMessageBox.Yes: return 'y' if uinfo == QMessageBox.No: return 'n' def eout(self): if self.P.isRunning(): self.P.stop() if self.Arabic is None: msgg = "<center>" msgg += " Opps, a critical error has occurred, we will be " msgg += " grateful if you can help fixing it, by reporting to us " msgg += " at : <br><br> " msgg += "<b><a href='https://fqms.github.io/'> " msgg += "https://fqms.github.io/ </a></b> </center>" mm = QMessageBox.critical(self, "Critical Error", msgg, QMessageBox.Ok) else: msgg = u"<center>" msgg += u"حدث خطأ فادح في تشغيل النظام , سنكون شاكرين لك إن " msgg += u"قمت بتبليغنا عنه , ليتم إصلاحه في أقرب وقت " msgg += u"<br>" msgg += u"<br><b><a href='https://fqms.github.io/'> " msgg += u"https://fqms.github.io </a></b> </center>" mm = QMessageBox.critical(self, u"خطأ في التشغيل", msgg, QMessageBox.Ok) def center(self): qrect = self.frameGeometry() cp = QDesktopWidget().availableGeometry().center() qrect.moveCenter(cp) self.move(qrect.topLeft()) def get_ips(self): il = [] for i in interfaces(): try: if os.name != 'nt': inf = i + " ," else: inf = ' ,' inf += ifaddresses(i)[2][0].get('addr') il.append(inf) except: pass return il def translate(self, ar=True): if ar: self.Arabic = "arabic" self.labutton.setEnabled(False) self.labutton.setText(u"العربية") self.labutton.setToolTip(u"تغير اللغة إلى العربية") self.lebutton.setText(u"الإنجليزية") self.lebutton.setToolTip(u"تغير اللغة إلى الإنجليزية") self.lebutton.setEnabled(True) self.Amsgb = u"عن النظام" self.abutton.setToolTip(u"عن النظام") self.mbutton.setText(u"تشغــيل") self.mbutton.setToolTip(u"تشغيل الخدمة") self.mbutton2.setText(u"إيــقاف") self.mbutton2.setToolTip(u"إيقاف الخدمة") self.sl.setToolTip(u"إختار عنوان IP ليتم بث الخدمة عليه") self.sl2.setToolTip(u"إختار منفذ ليتم بث الخدمة من خلاله") self.t.setToolTip(u"حالة الخدمة ") self.l.setToolTip(u"حالة الخدمة ") if self.Runningo: pp = self.slchange() addr = u"الخدمة <u>مشغــلة</u> و تبث على : <br>" addr += u"<a href='http://" addr += pp[1].split(',')[1] + u":" + pp[0] addr += u"'> http://" + pp[1].split(',')[1] + u":" + pp[0] addr += u"</a>" self.t.setText(addr) else: self.t.setText(u"الــخـدمة <u>متــوقفــة</u><br>") else: self.Arabic = None self.lebutton.setEnabled(False) self.lebutton.setText("English") self.lebutton.setToolTip('Change language to English') self.labutton.setEnabled(True) self.labutton.setText("Arabic") self.labutton.setToolTip('Change language to Arabic') self.Amsgb = "About FQM" self.abutton.setToolTip('About FQM') self.mbutton.setText("Start") self.mbutton.setToolTip("Start the server") self.mbutton2.setText("Stop") self.mbutton2.setToolTip("Stop the server") self.sl.setToolTip( 'Select network interface with ip, so the server runs on it') self.sl2.setToolTip('Select a port, so server runs through it') self.t.setToolTip('Status of the server') self.l.setToolTip('Status of the server') if self.Runningo: pp = self.slchange() addr = "Server is <u>Running</u> <br>" addr += " On : <a href='http://" addr += pp[1].split(',')[1] + ":" + pp[0] addr += "'> http://" + pp[1].split(',')[1] + ":" + pp[0] addr += "</a>" self.t.setText(addr) else: self.t.setText("Server is <u> Not running </u> <br>")
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
def testQIconCtorWithNone(self): icon = QIcon(None) pixmap = icon.pixmap(48, 48) self.app.exec_()