class QLoadingDialog(QDialog): def __init__(self, parent=None): super(QLoadingDialog, self).__init__() self.setFixedSize(100, 100) # self.setWindowOpacity(0.8) self.setWindowFlags(QtCore.Qt.FramelessWindowHint) self.setAttribute(QtCore.Qt.WA_TranslucentBackground) app = QApplication.instance() curr_theme = "light" if app: curr_theme = app.property("theme") gif_file = os.path.abspath( "./assets/icons/{}/loading.gif".format(curr_theme)) self.movie = QMovie(gif_file) self.label = QLabel() self.label.setMovie(self.movie) self.layout = QVBoxLayout(self) self.layout.addWidget(self.label) def center(self, host: QWidget = None): if host: hostGeometry: QRect = host.geometry() # dialogGeometry : QRect = self.geometry() centerPoint: QPoint = hostGeometry.center() centerPoint = host.mapToGlobal(centerPoint) offset = 30 targetPoint = QPoint(centerPoint.x() - offset, centerPoint.y() - offset) self.move(targetPoint) else: screen = QApplication.desktop().screenNumber( QApplication.desktop().cursor().pos()) centerPoint = QApplication.desktop().screenGeometry( screen).center() self.move(centerPoint) return self def showEvent(self, e: QShowEvent): if self.movie.state() == QMovie.NotRunning: self.movie.start() def closeEvent(self, e: QCloseEvent): if self.movie.state() == QMovie.Running: self.movie.stop() def exec_(self): self.center() return QDialog.exec_(self)
class LoadingWidget(QWidget, QObject): complete = pyqtSignal() def __init__(self, parent): QWidget.__init__(self, parent) QObject.__init__(self) self.setStyleSheet("background-color: #31353a;") self.setAutoFillBackground(True) self.gifPath = "img/loading.gif" self.initUI() def initUI(self): layout = QBoxLayout(QBoxLayout.TopToBottom, self) self.setLayout(layout) self.loadingMovie = QMovie(self.gifPath) self.loadingImg = QLabel(self) self.loadingImg.setMovie(self.loadingMovie) self.loadingImg.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.loadingImg.setAlignment(Qt.AlignCenter) self.logLabel = QLabelLogger(self) self.logLabel.setFormatter(logging.Formatter('%(message)s')) logging.getLogger().addHandler(self.logLabel) logging.getLogger().setLevel(logging.INFO) self.loadingBar = QProgressBar(self) self.loadingBar.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) self.loadingBar.setFixedHeight(10) self.loadingBar.setTextVisible(False) self.barThread = LoadingBarThread(self) self.barThread.change_value.connect(self.loadingBar.setValue) self.barThread.complete.connect(self.clear) layout.addWidget(self.loadingImg) layout.addWidget(self.logLabel.widget) layout.addWidget(self.loadingBar) self.layout().setContentsMargins(0, 0, 0, 0) def start(self): self.loadingMovie.start() self.barThread.start() self.show() def resume(self): if self.barThread.cnt <= 50: self.barThread.cnt = 100 return self.barThread.toggle_status() if self.loadingMovie.state() != QMovie.Running: self.loadingMovie.start() def clear(self): self.loadingMovie.stop() self.complete.emit()
def show_splash_screen_movie(app): movie = QMovie(str(':/anim/Splash_Screen.gif')) splash = MovieSplashScreen(movie, app) splash.show() start = time.time() while movie.state() == QMovie.Running and time.time() < start + 1.1: app.processEvents() return splash
def startSplash(meinGif, meineApp): pixmap = QMovie(meinGif) splash = MovieSplashScreen.MovieSplashScreen(pixmap) splash.setMask(splash.mask()) splash.sizeHint() splash.setWindowFlags(Qt.SplashScreen | Qt.WindowStaysOnTopHint) splash.show() splash.acceptDrops() splash.paintEvent(meineApp) splash.showEvent(meineApp) while pixmap.state() == QMovie.Running and not os.path.exists( os.path.dirname(sys.argv[0]) + "/setup.exe"): meineApp.processEvents()
class IconManagement(object): def __init__(self, tray, interval = 100): self.tray = tray self.movie = QMovie(":/images/tray_animations/tray.gif") self.movie.setSpeed(interval) self.movie.frameChanged.connect(self.next_icon) self.icons = Enum( ok = QIcon(":/images/demerio.png"), problem = QIcon(":/images/demerio-problem.png"), conductor_problem = QIcon(":/images/demerio-conductor-problem.png") ) self.icon = self.icons.ok self.update_icon() def internet_is_ok(self, internet_is_ok): self.icon = self.icons.ok if internet_is_ok else self.icons.problem self.update_icon() @pyqtSlot(int) def next_icon(self, i): self.tray.setIcon(QIcon(self.movie.currentPixmap())) def start(self): self.movie.start() def stop(self): self.update_icon() self.movie.stop() def update_icon(self): self.tray.setIcon(self.icon) def conductor_problem(self): if self.movie.state() == QMovie.Running: self.movie.stop() self.icon = self.icons.conductor_problem self.update_icon()
class IconManagement(object): def __init__(self, tray, interval=100): self.tray = tray self.movie = QMovie(":/images/tray_animations/tray.gif") self.movie.setSpeed(interval) self.movie.frameChanged.connect(self.next_icon) self.icons = Enum( ok=QIcon(":/images/demerio.png"), problem=QIcon(":/images/demerio-problem.png"), conductor_problem=QIcon(":/images/demerio-conductor-problem.png")) self.icon = self.icons.ok self.update_icon() def internet_is_ok(self, internet_is_ok): self.icon = self.icons.ok if internet_is_ok else self.icons.problem self.update_icon() @pyqtSlot(int) def next_icon(self, i): self.tray.setIcon(QIcon(self.movie.currentPixmap())) def start(self): self.movie.start() def stop(self): self.update_icon() self.movie.stop() def update_icon(self): self.tray.setIcon(self.icon) def conductor_problem(self): if self.movie.state() == QMovie.Running: self.movie.stop() self.icon = self.icons.conductor_problem self.update_icon()
class MoviePlayer(QWidget): def __init__(self, parent=None): super(MoviePlayer, self).__init__(parent) self.movie = QMovie(self) self.movie.setCacheMode(QMovie.CacheAll) self.movieLabel = QLabel("No movie loaded") self.movieLabel.setAlignment(Qt.AlignCenter) self.movieLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) self.movieLabel.setBackgroundRole(QPalette.Dark) self.movieLabel.setAutoFillBackground(True) self.currentMovieDirectory = '' self.createControls() self.createButtons() self.movie.frameChanged.connect(self.updateFrameSlider) self.movie.stateChanged.connect(self.updateButtons) self.fitCheckBox.clicked.connect(self.fitToWindow) self.frameSlider.valueChanged.connect(self.goToFrame) self.speedSpinBox.valueChanged.connect(self.movie.setSpeed) mainLayout = QVBoxLayout() mainLayout.addWidget(self.movieLabel) mainLayout.addLayout(self.controlsLayout) mainLayout.addLayout(self.buttonsLayout) self.setLayout(mainLayout) self.updateFrameSlider() self.updateButtons() self.setWindowTitle("Movie Player") self.resize(400, 400) def open(self): fileName, _ = QFileDialog.getOpenFileName(self, "Open a Movie", self.currentMovieDirectory) if fileName: self.openFile(fileName) def openFile(self, fileName): self.currentMovieDirectory = QFileInfo(fileName).path() self.movie.stop() self.movieLabel.setMovie(self.movie) self.movie.setFileName(fileName) self.movie.start() self.updateFrameSlider() self.updateButtons() def goToFrame(self, frame): self.movie.jumpToFrame(frame) def fitToWindow(self): self.movieLabel.setScaledContents(self.fitCheckBox.isChecked()) def updateFrameSlider(self): hasFrames = (self.movie.currentFrameNumber() >= 0) if hasFrames: if self.movie.frameCount() > 0: self.frameSlider.setMaximum(self.movie.frameCount() - 1) elif self.movie.currentFrameNumber() > self.frameSlider.maximum(): self.frameSlider.setMaximum(self.movie.currentFrameNumber()) self.frameSlider.setValue(self.movie.currentFrameNumber()) else: self.frameSlider.setMaximum(0) self.frameLabel.setEnabled(hasFrames) self.frameSlider.setEnabled(hasFrames) def updateButtons(self): state = self.movie.state() self.playButton.setEnabled(self.movie.isValid() and self.movie.frameCount() != 1 and state == QMovie.NotRunning) self.pauseButton.setEnabled(state != QMovie.NotRunning) self.pauseButton.setChecked(state == QMovie.Paused) self.stopButton.setEnabled(state != QMovie.NotRunning) def createControls(self): self.fitCheckBox = QCheckBox("Fit to Window") self.frameLabel = QLabel("Current frame:") self.frameSlider = QSlider(Qt.Horizontal) self.frameSlider.setTickPosition(QSlider.TicksBelow) self.frameSlider.setTickInterval(10) speedLabel = QLabel("Speed:") self.speedSpinBox = QSpinBox() self.speedSpinBox.setRange(1, 9999) self.speedSpinBox.setValue(100) self.speedSpinBox.setSuffix("%") self.controlsLayout = QGridLayout() self.controlsLayout.addWidget(self.fitCheckBox, 0, 0, 1, 2) self.controlsLayout.addWidget(self.frameLabel, 1, 0) self.controlsLayout.addWidget(self.frameSlider, 1, 1, 1, 2) self.controlsLayout.addWidget(speedLabel, 2, 0) self.controlsLayout.addWidget(self.speedSpinBox, 2, 1) def createButtons(self): iconSize = QSize(36, 36) openButton = QToolButton() openButton.setIcon(self.style().standardIcon( QStyle.SP_DialogOpenButton)) openButton.setIconSize(iconSize) openButton.setToolTip("Open File") openButton.clicked.connect(self.open) self.playButton = QToolButton() self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay)) self.playButton.setIconSize(iconSize) self.playButton.setToolTip("Play") self.playButton.clicked.connect(self.movie.start) self.pauseButton = QToolButton() self.pauseButton.setCheckable(True) self.pauseButton.setIcon(self.style().standardIcon( QStyle.SP_MediaPause)) self.pauseButton.setIconSize(iconSize) self.pauseButton.setToolTip("Pause") self.pauseButton.clicked.connect(self.movie.setPaused) self.stopButton = QToolButton() self.stopButton.setIcon(self.style().standardIcon(QStyle.SP_MediaStop)) self.stopButton.setIconSize(iconSize) self.stopButton.setToolTip("Stop") self.stopButton.clicked.connect(self.movie.stop) quitButton = QToolButton() quitButton.setIcon(self.style().standardIcon( QStyle.SP_DialogCloseButton)) quitButton.setIconSize(iconSize) quitButton.setToolTip("Quit") quitButton.clicked.connect(self.close) self.buttonsLayout = QHBoxLayout() self.buttonsLayout.addStretch() self.buttonsLayout.addWidget(openButton) self.buttonsLayout.addWidget(self.playButton) self.buttonsLayout.addWidget(self.pauseButton) self.buttonsLayout.addWidget(self.stopButton) self.buttonsLayout.addWidget(quitButton) self.buttonsLayout.addStretch()
class main_window(QMainWindow, ui_main.Ui_Dialog): def __init__(self, parent=None): super(main_window, self).__init__(parent) self.setupUi(self) self.pushButton.clicked.connect(self.test) self.pushButton_2.clicked.connect( lambda: self.send_command('pause\n')) #pauseButton self.pushButton_3.clicked.connect( lambda: self.rate_button(True)) #loveButton self.pushButton_4.clicked.connect( lambda: self.send_command('quit\n')) #skipButton self.pushButton_5.clicked.connect( lambda: self.rate_button(False)) #banButton self.volumeSlider.valueChanged.connect(self.volume_change) self.global_volume = 100 #default volume level self.stations = None #show load.gif self.movie = QMovie('ui/load.gif') self.albumImg.setMovie(self.movie) self.movie.start() #init pandora self.p = Pandora() #run thread self.queue = Queue() self.pandora_thread = connectThread(self.queue, self.p) self.pandora_thread.start() self.pandora_thread.labelSignal.connect(self.update_labels) self.pandora_thread.stationsSignal.connect(self.show_stations) self.pandora_thread.changeVolumeSignal.connect( lambda: self.volume_change(self.global_volume)) self.comboBox.currentIndexChanged.connect(self.change_station) def test(self): self.send_command('get_time_pos\n') logging.debug('test button') def change_station(self, index): logging.debug('chose id: %s' % index) #print('stations: %s' % self.stations) # in json try: json_stations = json.loads(json.dumps( self.stations)) #obj to str -> str to json logging.debug(json_stations[index]) except: logging.debug('station list is empty') def volume_change(self, volume): self.global_volume = volume try: with self.queue.mutex: self.queue.queue.clear() self.queue.put(self.global_volume) self.send_command('volume %s 1\n' % self.global_volume) except: logging.debug('couldn\'t change the volume') #TODO: somehow kill queue and start another # overriding standard close event def closeEvent(self, event): # do stuff if QCloseEvent: try: global mplayer_process mplayer_process.kill() except: print('Unexpected error') event.accept() # let the window close else: event.ignore() def send_command(self, com): global mplayer_process #print('command: %s' % com) #debug mplayer_process.stdin.write(com.encode('utf-8', 'ignore')) mplayer_process.stdin.flush() def update_labels(self, name, artist, album, url, fav, track, station): #stop load.gif if it's running (first iteration) if self.movie.state() == 2: self.movie.stop() #set labels and album img self.songTitle.setText(name) self.songTitle.adjustSize() self.songInfo.setText('by "%s" from "%s"' % (artist, album)) self.songInfo.adjustSize() self.favOrNot.setText('Yes' if fav == 1 else 'No') self.favOrNot.adjustSize() self.current_track = track self.current_station = station #TODO: spawn new transparent window like Google Music does? data = request.return_data(url, None, None, hdr, enable_proxy=False) img = QPixmap() img.loadFromData(data) resized_img = img.scaledToWidth(130) self.albumImg.setPixmap(resized_img) self.albumImg.adjustSize() # Open pop-up and log the info def show_stations(self, stations): print('\r\n(i) Found stations:') for i in range(0, len(stations)): print(i, stations[i]['stationId'], stations[i]['stationName']) window = stations_window(stations, self.queue, self) window.show() def rate_button(self, rating): print('\r\n(i) Loving song...' if rating == True else '\r\n(i) Banning song...') self.p.rate_song(self.current_station, self.current_track, rating) if (rating == False): self.send_command('q\n') else: self.favOrNot.setText('Yes') self.favOrNot.adjustSize()
class Ui_Dialog(QtWidgets.QMainWindow): sig = QtCore.pyqtSignal() def add_item(self, widget, info): form = AlertWidget(info) a = QtWidgets.QListWidgetItem() a.setSizeHint(form.sizeHint()) widget.insertItem(0, a) widget.setItemWidget(a, form) def __init__(self): super().__init__() uic.loadUi("UI/MainWindow.ui", self) self.searchButton.clicked.connect(self.crawler_search) self.movie = QMovie("loading.gif", QByteArray(), self.lblLogo) self.movie.setCacheMode(QMovie.CacheAll) self.movie.setSpeed(100) self.lblLogo.setMovie(self.movie) self.dw = None alerts = open("alerts.txt", "r").readlines() for line in alerts: print(line[:-1]) self.add_item(self.newListWidget, line) with open('history\history.txt', 'r') as fl: dict = json.load(fl) for key in dict.keys(): s = "" for c in dict[key]: s += c + "\n" self.add_item(self.webListWidget, key) self.show() def resultScreen(self): self.matchResult = crawlerResult.MatchGui((self.res[0], "alias"), self.res[1]) self.matchResult.show() self.movie.stop() def setresult(self, res): self.res = res def crawler_search(self): if self.dataButton.isChecked(): # data search = daniel hoch print("Hello") self.close() import os os.system('python main_ds.py %s' % str(self.searchEdit.text())) elif self.webButton.isChecked(): # web search = dor salomon # replace self.movie.start() print(self.movie.state()) self.sig.connect(self.resultScreen) self.t = Thread(self) self.t.start() self.show() '''if self.searchEdit.text() == "~test":
class Ui_MainWindow(QtCore.QObject): sig = QtCore.pyqtSignal() def setupresUi(self): print(threading.enumerate()) print(self.res) output = self.res[1] with open('history\history.txt', 'r') as fl: log = json.load(fl) log[self.res[0]] = output with open('history\history.txt', 'w') as fl: json.dump(log, fl) self.t.exit() # with open('history\history.txt', 'w') as json_file: # json.dump(log, json_file) MainWindow = self.MainWindow MainWindow.setObjectName("MainWindow") MainWindow.resize(861, 690) MainWindow.setStyleSheet("background-color: rgb(255,255,255);") self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.backButton = QtWidgets.QCommandLinkButton(self.centralwidget) self.backButton.setMinimumSize(QtCore.QSize(40, 40)) self.backButton.setMaximumSize(QtCore.QSize(40, 40)) self.backButton.setBaseSize(QtCore.QSize(40, 40)) self.backButton.setText("") self.backButton.setIconSize(QtCore.QSize(40, 40)) self.backButton.setCheckable(False) self.backButton.setObjectName("backButton") self.MainWindow = MainWindow self.backButton.clicked.connect(self.setupUi) self.horizontalLayout.addWidget(self.backButton) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.verticalLayout.addLayout(self.horizontalLayout) self.line = QtWidgets.QFrame(self.centralwidget) self.line.setStyleSheet("color: rgb(0, 0, 0);\n" "background-color: rgb(255, 255, 255);") self.line.setFrameShape(QtWidgets.QFrame.HLine) self.line.setFrameShadow(QtWidgets.QFrame.Sunken) self.line.setObjectName("line") self.verticalLayout.addWidget(self.line) self.resultWidget = QtWidgets.QListWidget(self.centralwidget) self.resultWidget.setVerticalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOn) self.resultWidget.setObjectName("resultWidget") self.verticalLayout.addWidget(self.resultWidget) self.pieBox = QtWidgets.QFrame(self.centralwidget) self.pieBox.setFrameShape(QtWidgets.QFrame.StyledPanel) self.pieBox.setFrameShadow(QtWidgets.QFrame.Raised) self.pieBox.setObjectName("pieBox") self.verticalLayout.addWidget(self.pieBox) '''plot area''' plt.rcParams.update({'font.size': 14}) # a figure instance to plot on self.figure = plt.figure(figsize=(2, 2), facecolor='#FFFFFF') # this is the Canvas Widget that displays the `figure` # it takes the `figure` instance as a parameter to __init__ self.canvas = FigureCanvas(self.figure) self.canvas.setParent(self.pieBox) layout = QtWidgets.QVBoxLayout() layout.addWidget(self.canvas) self.pieBox.setLayout(layout) dict = {} mask = {} for url in output: b = url url = url.split('://')[-1].split("?")[0].split('/')[0].split( ':')[0].lower() mask[url] = b if url in dict.keys(): dict[url] += 1 else: dict[url] = 1 sorted(dict) i = 1 for item in list(dict.keys())[0:LEN]: form = QtWidgets.QWidget() a = QtWidgets.QListWidgetItem() ui = entry.Ui_Entry() ui.setupUi(form, "#" + str(i) + " - " + item, mask[item]) a.setSizeHint(form.sizeHint()) self.resultWidget.insertItem(-1, a) self.resultWidget.setItemWidget(a, form) i += 1 def enum_list(lst): i = 1 ans = [] for it in lst: ans.append("No. " + str(i)) i += 1 return ans labels = enum_list(dict.keys())[0:LEN] print(type(dict.values())) sizes = list(dict.values())[0:LEN] self.figure.clear() ax = self.figure.add_subplot(111) plt.tight_layout() y_pos = [0] * len(labels) for i in range(0, len(labels)): y_pos[i] = i # plot data ax.bar(y_pos, sizes, align='center', alpha=0.5) ax.set_title('Hits by website') plt.xticks(y_pos, labels) plt.ylabel('Amount of matches') # refresh canvas self.canvas.draw() MainWindow.setCentralWidget(self.centralwidget) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle( _translate("MainWindow", "Search result - " + self.res[0])) QtCore.QMetaObject.connectSlotsByName(MainWindow) def setMain(self, Main): self.MainWindow = Main def setupUi(self): try: os.remove('cache.ch') except: pass MainWindow = self.MainWindow MainWindow.setObjectName("MainWindow") MainWindow.setWindowModality(QtCore.Qt.WindowModal) MainWindow.resize(871, 697) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap("SEO_sign-512.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) MainWindow.setWindowIcon(icon) MainWindow.setStyleSheet("background-color: rgb(255, 255, 255);") self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setStyleSheet( "background-color: rgb(255, 255, 255);") self.centralwidget.setObjectName("centralwidget") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.centralwidget) self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) self.verticalLayout_2.setSpacing(0) self.verticalLayout_2.setObjectName("verticalLayout_2") self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setSpacing(0) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.frame = QtWidgets.QFrame(self.centralwidget) self.frame.setMinimumSize(QtCore.QSize(25, 0)) self.frame.setStyleSheet("background-color: rgb(255, 255, 255);\n" "border-color: rgb(0, 0, 0);") self.frame.setFrameShape(QtWidgets.QFrame.NoFrame) self.frame.setFrameShadow(QtWidgets.QFrame.Plain) self.frame.setLineWidth(0) self.frame.setObjectName("frame") self.horizontalLayout_2.addWidget(self.frame) self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setSpacing(0) self.verticalLayout.setObjectName("verticalLayout") spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem) self.titleLbl = QtWidgets.QLabel(self.centralwidget) self.titleLbl.setStyleSheet("font: 26pt \"Tahoma\";\n" "color: rgb(0, 0, 0);") self.titleLbl.setObjectName("titleLbl") self.verticalLayout.addWidget(self.titleLbl) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setSpacing(0) self.horizontalLayout.setObjectName("horizontalLayout") self.searchBarEdit = QtWidgets.QLineEdit(self.centralwidget) self.searchBarEdit.setMinimumSize(QtCore.QSize(0, 40)) self.searchBarEdit.setStyleSheet("font: 16pt \"Tahoma\";\n" "color: rgb(0, 0, 0);") self.searchBarEdit.setObjectName("searchBarEdit") self.horizontalLayout.addWidget(self.searchBarEdit) self.searchButton = QtWidgets.QPushButton(self.centralwidget) self.searchButton.setStyleSheet( "font: 16pt \"Tahoma\";\n" "background-color: rgb(255, 255, 255);\n" "color: rgb(0, 0, 0);") self.searchButton.setText("") icon1 = QtGui.QIcon() icon1.addPixmap(QtGui.QPixmap("images.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.searchButton.setIcon(icon1) self.searchButton.setIconSize(QtCore.QSize(40, 40)) self.searchButton.setObjectName("searchButton") self.MainWindow = MainWindow self.searchButton.clicked.connect(self.search) self.horizontalLayout.addWidget(self.searchButton) self.verticalLayout.addLayout(self.horizontalLayout) self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem1) self.radioButton_3 = QtWidgets.QRadioButton(self.centralwidget) self.radioButton_3.setStyleSheet("font: 14pt \"Tahoma\";\n" "color: rgb(0, 0, 0);") self.radioButton_3.setObjectName("radioButton_3") self.horizontalLayout_3.addWidget(self.radioButton_3) self.radioButton_2 = QtWidgets.QRadioButton(self.centralwidget) self.radioButton_2.setStyleSheet("font: 14pt \"Tahoma\";\n" "color: rgb(0, 0, 0);") self.radioButton_2.setObjectName("radioButton_2") self.horizontalLayout_3.addWidget(self.radioButton_2) self.radioButton = QtWidgets.QRadioButton(self.centralwidget) self.radioButton.setStyleSheet("font: 14pt \"Tahoma\";\n" "color: rgb(0, 0, 0);") self.radioButton.setObjectName("radioButton") self.horizontalLayout_3.addWidget(self.radioButton) spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem2) self.verticalLayout.addLayout(self.horizontalLayout_3) spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem3) self.horizontalLayout_2.addLayout(self.verticalLayout) self.verticalLayout_2.addLayout(self.horizontalLayout_2) spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem1) self.horizontalLayout_2.addLayout(self.verticalLayout) self.verticalLayout_2.addLayout(self.horizontalLayout_2) MainWindow.setCentralWidget(self.centralwidget) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.loading = QtWidgets.QLabel(self.centralwidget) self.loading.setText("") self.loading.setObjectName("loading") self.verticalLayout.addWidget( self.loading, 0, QtCore.Qt.AlignCenter | QtCore.Qt.AlignBottom) self.movie = QMovie("loading.gif", QByteArray(), self.loading) self.movie.setCacheMode(QMovie.CacheAll) self.movie.setSpeed(100) self.loading.setMovie(self.movie) _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "Web Crawler")) self.titleLbl.setText(_translate("MainWindow", "Web Crawler")) self.radioButton_2.setText(_translate("MainWindow", "Web search")) self.radioButton.setText(_translate("MainWindow", "Site search")) self.srchBtn = QtWidgets.QPushButton(self.centralwidget) self.srchBtn.setMaximumSize(QtCore.QSize(250, 16777215)) self.srchBtn.setStyleSheet("font: 16pt \"Tahoma\";") self.srchBtn.setObjectName("pushButton") self.srchBtn.clicked.connect(self.history) self.verticalLayout.addWidget(self.srchBtn, 0, QtCore.Qt.AlignHCenter) self.srchBtn.setText(_translate("MainWindow", "Search History")) QtCore.QMetaObject.connectSlotsByName(MainWindow) def history(self): self.w = history.Ui_History() self.w.show() def search(self): self.movie.start() print(self.movie.state()) self.sig.connect(self.setupresUi) self.t = Thread(self) self.t.start() self.MainWindow.show() def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "Web Crawler")) self.titleLbl.setText(_translate("MainWindow", "Web Crawler")) self.radioButton_3.setText(_translate("MainWindow", "DarkNet search")) self.radioButton_2.setText(_translate("MainWindow", "Web search")) self.radioButton.setText(_translate("MainWindow", "Site search")) def setresult(self, res): self.res = res
class MoviePlayer(QWidget): def __init__(self, parent=None): super(MoviePlayer, self).__init__(parent) self.movie = QMovie(self) self.movie.setCacheMode(QMovie.CacheAll) self.movieLabel = QLabel("No movie loaded") self.movieLabel.setAlignment(Qt.AlignCenter) self.movieLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) self.movieLabel.setBackgroundRole(QPalette.Dark) self.movieLabel.setAutoFillBackground(True) self.currentMovieDirectory = '' self.createControls() self.createButtons() self.movie.frameChanged.connect(self.updateFrameSlider) self.movie.stateChanged.connect(self.updateButtons) self.fitCheckBox.clicked.connect(self.fitToWindow) self.frameSlider.valueChanged.connect(self.goToFrame) self.speedSpinBox.valueChanged.connect(self.movie.setSpeed) mainLayout = QVBoxLayout() mainLayout.addWidget(self.movieLabel) mainLayout.addLayout(self.controlsLayout) mainLayout.addLayout(self.buttonsLayout) self.setLayout(mainLayout) self.updateFrameSlider() self.updateButtons() self.setWindowTitle("Movie Player") self.resize(400, 400) def open(self): fileName, _ = QFileDialog.getOpenFileName(self, "Open a Movie", self.currentMovieDirectory) if fileName: self.openFile(fileName) def openFile(self, fileName): self.currentMovieDirectory = QFileInfo(fileName).path() self.movie.stop() self.movieLabel.setMovie(self.movie) self.movie.setFileName(fileName) self.movie.start() self.updateFrameSlider(); self.updateButtons(); def goToFrame(self, frame): self.movie.jumpToFrame(frame) def fitToWindow(self): self.movieLabel.setScaledContents(self.fitCheckBox.isChecked()) def updateFrameSlider(self): hasFrames = (self.movie.currentFrameNumber() >= 0) if hasFrames: if self.movie.frameCount() > 0: self.frameSlider.setMaximum(self.movie.frameCount() - 1) elif self.movie.currentFrameNumber() > self.frameSlider.maximum(): self.frameSlider.setMaximum(self.movie.currentFrameNumber()) self.frameSlider.setValue(self.movie.currentFrameNumber()) else: self.frameSlider.setMaximum(0) self.frameLabel.setEnabled(hasFrames) self.frameSlider.setEnabled(hasFrames) def updateButtons(self): state = self.movie.state() self.playButton.setEnabled(self.movie.isValid() and self.movie.frameCount() != 1 and state == QMovie.NotRunning) self.pauseButton.setEnabled(state != QMovie.NotRunning) self.pauseButton.setChecked(state == QMovie.Paused) self.stopButton.setEnabled(state != QMovie.NotRunning) def createControls(self): self.fitCheckBox = QCheckBox("Fit to Window") self.frameLabel = QLabel("Current frame:") self.frameSlider = QSlider(Qt.Horizontal) self.frameSlider.setTickPosition(QSlider.TicksBelow) self.frameSlider.setTickInterval(10) speedLabel = QLabel("Speed:") self.speedSpinBox = QSpinBox() self.speedSpinBox.setRange(1, 9999) self.speedSpinBox.setValue(100) self.speedSpinBox.setSuffix("%") self.controlsLayout = QGridLayout() self.controlsLayout.addWidget(self.fitCheckBox, 0, 0, 1, 2) self.controlsLayout.addWidget(self.frameLabel, 1, 0) self.controlsLayout.addWidget(self.frameSlider, 1, 1, 1, 2) self.controlsLayout.addWidget(speedLabel, 2, 0) self.controlsLayout.addWidget(self.speedSpinBox, 2, 1) def createButtons(self): iconSize = QSize(36, 36) openButton = QToolButton() openButton.setIcon(self.style().standardIcon(QStyle.SP_DialogOpenButton)) openButton.setIconSize(iconSize) openButton.setToolTip("Open File") openButton.clicked.connect(self.open) self.playButton = QToolButton() self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay)) self.playButton.setIconSize(iconSize) self.playButton.setToolTip("Play") self.playButton.clicked.connect(self.movie.start) self.pauseButton = QToolButton() self.pauseButton.setCheckable(True) self.pauseButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPause)) self.pauseButton.setIconSize(iconSize) self.pauseButton.setToolTip("Pause") self.pauseButton.clicked.connect(self.movie.setPaused) self.stopButton = QToolButton() self.stopButton.setIcon(self.style().standardIcon(QStyle.SP_MediaStop)) self.stopButton.setIconSize(iconSize) self.stopButton.setToolTip("Stop") self.stopButton.clicked.connect(self.movie.stop) quitButton = QToolButton() quitButton.setIcon(self.style().standardIcon(QStyle.SP_DialogCloseButton)) quitButton.setIconSize(iconSize) quitButton.setToolTip("Quit") quitButton.clicked.connect(self.close) self.buttonsLayout = QHBoxLayout() self.buttonsLayout.addStretch() self.buttonsLayout.addWidget(openButton) self.buttonsLayout.addWidget(self.playButton) self.buttonsLayout.addWidget(self.pauseButton) self.buttonsLayout.addWidget(self.stopButton) self.buttonsLayout.addWidget(quitButton) self.buttonsLayout.addStretch()
"CREATE TABLE saveddata (username CHAR NOT NULL,acntname CHAR NOT NULL,usrname CHAR NOT NULL,passwd CHAR NOT NULL);" ) dbcursor.execute( "CREATE TABLE user (username CHAR NOT NULL PRIMARY KEY,passwd CHAR NOT NULL,gender CHAR NOT NULL);" ) dbroot.commit() dbroot.close() app = QtWidgets.QApplication(sys.argv) main_window = QtWidgets.QMainWindow() ui = Ui_main_window() movie = QMovie("resources/lock.gif") splash = MovieSplashScreen(movie) splash.show() start = time.time() while movie.state() == QMovie.Running and time.time() < start + 2: app.processEvents() #Function def setui(): dbroot = sqlite3.connect( 'file:C:/Users/Public/Passwordprotector/main.db?mode=rw', uri=True) dbcursor = dbroot.cursor() dbcursor.execute("SELECT username FROM user ;") result = dbcursor.fetchall() userselect_screen.userpassword_lineedit.clear() userselect_screen.userselect_combobox.clear() userselect_screen.userselect_combobox.addItem("") userselect_screen.userselect_combobox.setItemText(0, "SELECT USER")
class Ui_MainWindow(QtCore.QObject): sig = QtCore.pyqtSignal() def setupresUi(self): print(threading.enumerate()) output = self.res self.t.exit() MainWindow = self.MainWindow MainWindow.setObjectName("MainWindow") MainWindow.resize(861, 690) MainWindow.setStyleSheet("background-color: rgb(255,255,255);") self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.backButton = QtWidgets.QCommandLinkButton(self.centralwidget) self.backButton.setMinimumSize(QtCore.QSize(40, 40)) self.backButton.setMaximumSize(QtCore.QSize(40, 40)) self.backButton.setBaseSize(QtCore.QSize(40, 40)) self.backButton.setText("") self.backButton.setIconSize(QtCore.QSize(40, 40)) self.backButton.setCheckable(False) self.backButton.setObjectName("backButton") self.MainWindow = MainWindow self.backButton.clicked.connect(self.setupUi) self.horizontalLayout.addWidget(self.backButton) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.verticalLayout.addLayout(self.horizontalLayout) self.line = QtWidgets.QFrame(self.centralwidget) self.line.setStyleSheet("color: rgb(0, 0, 0);\n" "background-color: rgb(255, 255, 255);") self.line.setFrameShape(QtWidgets.QFrame.HLine) self.line.setFrameShadow(QtWidgets.QFrame.Sunken) self.line.setObjectName("line") self.verticalLayout.addWidget(self.line) self.resultWidget = QtWidgets.QListWidget(self.centralwidget) self.resultWidget.setVerticalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOn) self.resultWidget.setObjectName("resultWidget") for item in output: form = QtWidgets.QWidget() a = QtWidgets.QListWidgetItem() ui = entry.Ui_Entry() ui.setupUi(form, item) a.setSizeHint(form.sizeHint()) self.resultWidget.insertItem(0, a) self.resultWidget.setItemWidget(a, form) self.verticalLayout.addWidget(self.resultWidget) self.pieBox = QtWidgets.QFrame(self.centralwidget) self.pieBox.setFrameShape(QtWidgets.QFrame.StyledPanel) self.pieBox.setFrameShadow(QtWidgets.QFrame.Raised) self.pieBox.setObjectName("pieBox") self.verticalLayout.addWidget(self.pieBox) '''plot area''' plt.rcParams.update({'font.size': 14}) # a figure instance to plot on self.figure = plt.figure(figsize=(2, 2), facecolor='#696969') # this is the Canvas Widget that displays the `figure` # it takes the `figure` instance as a parameter to __init__ self.canvas = FigureCanvas(self.figure) self.canvas.setParent(self.pieBox) layout = QtWidgets.QVBoxLayout() layout.addWidget(self.canvas) self.pieBox.setLayout(layout) dict = {} for url in output: url = url.split('://')[-1].split("?")[0].split('/')[0].split( ':')[0].lower() if url in dict.keys(): dict[url] += 1 else: dict[url] = 1 print(dict) labels = dict.keys() sizes = dict.values() colors = ['#006FF6'] explode = [0.05] * len(sizes) # explode slices self.figure.clear() ax = self.figure.add_subplot(111) # plot data ax.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=90) ax.set_title('precentage by website') # refresh canvas self.canvas.draw() MainWindow.setCentralWidget(self.centralwidget) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "Web Crawler")) QtCore.QMetaObject.connectSlotsByName(MainWindow) def setMain(self, Main): self.MainWindow = Main def setupUi(self): try: os.remove('cache.ch') except: pass MainWindow = self.MainWindow MainWindow.setObjectName("MainWindow") MainWindow.setWindowModality(QtCore.Qt.WindowModal) MainWindow.resize(871, 697) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap("SEO_sign-512.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) MainWindow.setWindowIcon(icon) MainWindow.setStyleSheet("background-color: rgb(255, 255, 255);") self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setStyleSheet( "background-color: rgb(255, 255, 255);") self.centralwidget.setObjectName("centralwidget") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.centralwidget) self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) self.verticalLayout_2.setSpacing(0) self.verticalLayout_2.setObjectName("verticalLayout_2") self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setSpacing(0) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.frame = QtWidgets.QFrame(self.centralwidget) self.frame.setMinimumSize(QtCore.QSize(25, 0)) self.frame.setStyleSheet("background-color: rgb(255, 255, 255);\n" "border-color: rgb(0, 0, 0);") self.frame.setFrameShape(QtWidgets.QFrame.NoFrame) self.frame.setFrameShadow(QtWidgets.QFrame.Plain) self.frame.setLineWidth(0) self.frame.setObjectName("frame") self.horizontalLayout_2.addWidget(self.frame) self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setSpacing(0) self.verticalLayout.setObjectName("verticalLayout") spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem) self.titleLbl = QtWidgets.QLabel(self.centralwidget) self.titleLbl.setStyleSheet("font: 26pt \"Tahoma\";\n" "color: rgb(0, 0, 0);") self.titleLbl.setObjectName("titleLbl") self.verticalLayout.addWidget(self.titleLbl) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setSpacing(0) self.horizontalLayout.setObjectName("horizontalLayout") self.searchBarEdit = QtWidgets.QLineEdit(self.centralwidget) self.searchBarEdit.setMinimumSize(QtCore.QSize(0, 40)) self.searchBarEdit.setStyleSheet("font: 16pt \"Tahoma\";\n" "color: rgb(0, 0, 0);") self.searchBarEdit.setObjectName("searchBarEdit") self.horizontalLayout.addWidget(self.searchBarEdit) self.searchButton = QtWidgets.QPushButton(self.centralwidget) self.searchButton.setStyleSheet( "font: 16pt \"Tahoma\";\n" "background-color: rgb(255, 255, 255);\n" "color: rgb(0, 0, 0);") self.searchButton.setText("") icon1 = QtGui.QIcon() icon1.addPixmap(QtGui.QPixmap("images.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.searchButton.setIcon(icon1) self.searchButton.setIconSize(QtCore.QSize(40, 40)) self.searchButton.setObjectName("searchButton") self.MainWindow = MainWindow self.searchButton.clicked.connect(self.search) self.horizontalLayout.addWidget(self.searchButton) self.verticalLayout.addLayout(self.horizontalLayout) self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem1) self.radioButton_2 = QtWidgets.QRadioButton(self.centralwidget) self.radioButton_2.setStyleSheet("font: 14pt \"Tahoma\";\n" "color: rgb(0, 0, 0);") self.radioButton_2.setObjectName("radioButton_2") self.horizontalLayout_3.addWidget(self.radioButton_2) self.radioButton = QtWidgets.QRadioButton(self.centralwidget) self.radioButton.setStyleSheet("font: 14pt \"Tahoma\";\n" "color: rgb(0, 0, 0);") self.radioButton.setObjectName("radioButton") self.horizontalLayout_3.addWidget(self.radioButton) spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem2) self.verticalLayout.addLayout(self.horizontalLayout_3) spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem3) self.horizontalLayout_2.addLayout(self.verticalLayout) self.verticalLayout_2.addLayout(self.horizontalLayout_2) spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem1) self.horizontalLayout_2.addLayout(self.verticalLayout) self.verticalLayout_2.addLayout(self.horizontalLayout_2) MainWindow.setCentralWidget(self.centralwidget) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.loading = QtWidgets.QLabel(self.centralwidget) self.loading.setText("") self.loading.setObjectName("loading") self.verticalLayout.addWidget( self.loading, 0, QtCore.Qt.AlignCenter | QtCore.Qt.AlignBottom) self.movie = QMovie("loading.gif", QByteArray(), self.loading) self.movie.setCacheMode(QMovie.CacheAll) self.movie.setSpeed(100) self.loading.setMovie(self.movie) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def search(self): self.movie.start() print(self.movie.state()) self.sig.connect(self.setupresUi) self.t = Thread(self) self.t.start() self.MainWindow.show() def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "Web Crawler")) self.titleLbl.setText(_translate("MainWindow", "Web Crawler")) self.radioButton_2.setText(_translate("MainWindow", "Web search")) self.radioButton.setText(_translate("MainWindow", "Site search")) def setresult(self, res): self.res = res
class Game(QMainWindow, Ui_MainWindow): # set window on screen center def center(self): frameGm = self.frameGeometry() screen = QtWidgets.QApplication.desktop().screenNumber( QtWidgets.QApplication.desktop().cursor().pos()) centerPoint = QtWidgets.QApplication.desktop().screenGeometry( screen).center() frameGm.moveCenter(centerPoint) self.move(frameGm.topLeft()) # move window by holding right mouse button def mousePressEvent(self, event): if event.buttons() == Qt.RightButton: self.oldPos = event.globalPos() def mouseMoveEvent(self, event): # print(delta) if event.buttons() == Qt.RightButton: delta = QPoint(event.globalPos() - self.oldPos) self.move(self.x() + delta.x(), self.y() + delta.y()) self.oldPos = event.globalPos() def animateBackground(self): # Load the file into a QMovie self.movie = QMovie(APP_FOLDER + "/resources/images/clouds.gif", QByteArray(), self) self.movie.setScaledSize(QSize(1020, 900)) self.movie.setSpeed(70) proxy_style = RoundPixmapStyle(radius=20, style=self.lbBackground.style()) self.lbBackground.setStyle(proxy_style) self.lbBackground.setMovie(self.movie) self.movie.start() def settings(self): settings = QSettings() return settings def __init__(self, parent=None): # Αρχικοποίηση του γραφικού περιβάλλοντος super(Game, self).__init__(parent) print(APP_FOLDER) self.setupUi(self) c.SCORE = self.settings().value("score", 0, type=int) # Μεταβλητές self.points = [] self.speed = 30 self.movie = None self.commands = { c.KEY_UP: logic.up, c.KEY_DOWN: logic.down, c.KEY_LEFT: logic.left, c.KEY_RIGHT: logic.right, c.KEY_UP_ALT: logic.up, c.KEY_DOWN_ALT: logic.down, c.KEY_LEFT_ALT: logic.left, c.KEY_RIGHT_ALT: logic.right, c.KEY_J: logic.left, c.KEY_L: logic.right, c.KEY_I: logic.up, c.KEY_K: logic.down } self.setWindowFlags(QtCore.Qt.CustomizeWindowHint | QtCore.Qt.FramelessWindowHint) self.setAttribute(Qt.WA_TranslucentBackground, True) self.center() self.settings() self.restoreStates() self.fontDatabase = QFontDatabase() self.fontDatabase.addApplicationFont( APP_FOLDER + "/resources/fonts/JackportCollegeNcv-1MZe.ttf") self.fontDatabase.addApplicationFont( APP_FOLDER + "/resources/fonts/Rosemary-Bold.ttf") self.lScore.setFont(QFont("JACKPORT COLLEGE NCV", 40)) self.lHiScore.setFont(QFont("JACKPORT COLLEGE NCV", 40)) self.bExit.setFont(QFont("JACKPORT COLLEGE NCV", 32)) self.lMediaSet.setFont(QFont("Rosemary", 38)) swipeCurImg = QPixmap(APP_FOLDER + "/resources/images/swipeCursor.png") handCurImg = QPixmap(APP_FOLDER + "/resources/images/handCursor.png") self.cursors = [handCurImg, swipeCurImg] self.centralwidget.setCursor(QCursor(self.cursors[0], 15, 2)) self.frame.setCursor(QCursor(self.cursors[1], 35, 35)) self.frame.setAttribute(Qt.WA_StyledBackground, (True)) self.animateBackground() self.musIcon() self.sndIcon() self.playMusic() self.init_grid() self.matrix = logic.new_game(c.GRID_LEN) self.history_matrixs = [] self.update_grid_cells() self.restoreGame() # Αντιστοίχιση ενεργειών κίνησης ποντικιού και κλικ self.bHelp.clicked.connect(self.bHelpClicked) self.bAnim.clicked.connect(self.animStartStop) self.sndslider.valueChanged.connect(self.sndslvalchanged) self.musslider.valueChanged.connect(self.musslvalchanged) self.frame.installEventFilter(self) # Μέθοδος ενεργοποίησης/απενεργοποίησης του κινούμενου bakcground def animStartStop(self): if self.movie != None and self.movie.state() == QMovie.Running: self.movie.stop() self.bAnim.setStyleSheet( "QPushButton{\n" "border-image: url(:/resources/images/anim_off.png)\n" "}") else: self.animateBackground() self.bAnim.setStyleSheet( "QPushButton{\n" "border-image: url(:/resources/images/anim_on.png)\n" "}") # Σχεδίαση του βασικού πλαισίου def init_grid(self): for i in range(c.GRID_LEN): for j in range(c.GRID_LEN): self.gridBoard.addWidget(self.setTile("empty"), i, j) def generate_next(self): index = (gen(), gen()) while self.matrix[index[0]][index[1]] != 0: index = (gen(), gen()) self.matrix[index[0]][index[1]] = 2 def update_grid_cells(self): for i in range(c.GRID_LEN): for j in range(c.GRID_LEN): new_number = self.matrix[i][j] if new_number == 0: self.replaceTile("empty", i, j) else: self.replaceTile(new_number, i, j) # Δημιουργία των αριθμητικών πλακιδίων def setTile(self, item): tile = QLabel('') tile.setFocusPolicy(Qt.NoFocus) tile.setFixedWidth(135) tile.setFixedHeight(140) path = c.CELL_IMAGE_DICT.get(item) tile.setStyleSheet("QLabel{\n" "border-image: url(:" + str(path) + ")\n" "}") tile.setObjectName(str(item)) return tile # Μέθοδος αντικατάστασης πλακιδίου def replaceTile(self, newTile, pX, pY): item = self.gridBoard.itemAtPosition(pX, pY) self.gridBoard.removeWidget(item.widget()) self.gridBoard.addWidget(self.setTile(newTile), pX, pY) # Ενεργοποίηση των πλήκτρων χειρισμού def keyPressEvent(self, event): key = event.key() modifiers = QtWidgets.QApplication.keyboardModifiers() if modifiers == QtCore.Qt.ControlModifier: if key == QtCore.Qt.Key_Home: # print("is up!") if self.frameGeometry().y() > 0: self.move(self.frameGeometry().x(), self.frameGeometry().y() - self.speed) elif key == QtCore.Qt.Key_End: # print("is down!") if self.frameGeometry().y() > 0: self.move(self.frameGeometry().x(), self.frameGeometry().y() + self.speed) elif key == QtCore.Qt.Key_Delete: # print("is left!") if self.frameGeometry().x() > 0: self.move(self.frameGeometry().x() - self.speed, self.frameGeometry().y()) elif key == QtCore.Qt.Key_PageDown: # print("is right!") if self.frameGeometry().x() > 0: self.move(self.frameGeometry().x() + self.speed, self.frameGeometry().y()) if key == c.KEY_BACK or key == c.KEY_BACK_ALT: if len(self.history_matrixs) > 1: self.matrix = self.history_matrixs.pop() self.update_grid_cells() #print('back on step total step:', len(self.history_matrixs)) # Έλεγχος Αν το παιχνίδι τελείωσε και αν έχει κερδηθεί ή χαθεί elif key in self.commands: self.frame.setCursor(Qt.BlankCursor) self.matrix, done = self.commands[key](self.matrix) if done: self.stateOfGame() def stateOfGame(self): self.playSound(APP_FOLDER + c.SOUNDS_DICT["move"]) self.matrix = logic.add_two(self.matrix) # record last move self.history_matrixs.append(self.matrix) #print(self.history_matrixs[-1]) self.update_grid_cells() if logic.game_state(self.matrix) == 'win': if logic.winNum != 65535: print("num: " + str(logic.winNum)) for key, value in c.SOUNDS_DICT.items(): if key == str(logic.winNum): self.playSound(APP_FOLDER + value) winLooseDlg.WinLooseDialog(self).dialogTypes("WIN") print("Κερδίσες") else: winLooseDlg.WinLooseDialog(self).dialogTypes("ENDGAME") if logic.game_state(self.matrix) == 'lose': self.playSound(APP_FOLDER + c.SOUNDS_DICT["lose"]) winLooseDlg.WinLooseDialog(self).dialogTypes("LOOSE") print("Έχασες") self.lScore.setText(str(c.SCORE)) if int(self.lHiScore.text()) < int(self.lScore.text()): self.lHiScore.setText(self.lScore.text()) # Μέθοδος για χειρσμό με κλικ και σύρσιμο του ποντικιού def eventFilter(self, source, event): if event.type() == QtCore.QEvent.MouseMove: self.frame.setCursor(QCursor(self.cursors[1], 35, 35)) if event.buttons() == QtCore.Qt.LeftButton: if len(self.points) > 2: startx, starty = self.points[0][0], self.points[0][1] for i in range(len(self.points)): self.points[i] = (self.points[i][0] - startx, self.points[i][1] - starty) self.points.append( (event.localPos().x(), event.localPos().y())) # print(self.points) if event.type() == QtCore.QEvent.MouseButtonRelease and event.button( ) == QtCore.Qt.LeftButton: # print("Released!") self.mouseDown = False strokes = moosegesture.getGesture(self.points) if len(strokes) > 0: strokeText = str(strokes[-1]) # print(strokeText) if strokeText == "R": self.matrix, done = logic.right(self.matrix) if done: self.stateOfGame() elif strokeText == "L": self.matrix, done = logic.left(self.matrix) if done: self.stateOfGame() elif strokeText == "U": self.matrix, done = logic.up(self.matrix) if done: self.stateOfGame() elif strokeText == "D": self.matrix, done = logic.down(self.matrix) if done: self.stateOfGame() strokes.clear() else: return True return self.frame.eventFilter(source, event) # Μέθοδος για την αναπαραγωγή των ήχων def playSound(self, sound): pygame.mixer.pre_init(frequency=44100, size=-16, channels=3, buffer=512) pygame.mixer.init() effect = pygame.mixer.Sound(sound) self.sndslider.setMinimum(0) self.sndslider.setMaximum(100) vol = self.sndslider.value() effect.set_volume(vol / 100) pygame.mixer.find_channel().play(effect) # Έλεγχος για αλλαγές στο εικονίδιο ήχου def sndslvalchanged(self): self.sndIcon() # Αλλαγή του εικονιδίου ήχου def sndIcon(self): if self.sndslider.value() == 0: self.lSound.setStyleSheet( "QLabel{\n" "border-image: url(:/resources/images/sound_off.png)\n" "}") else: self.lSound.setStyleSheet( "QLabel{\n" "border-image: url(:/resources/images/sound_on.png)\n" "}") # Μέθοδος για την αnaπαραγωγή μουσικής def playMusic(self): pygame.mixer.init(frequency=44100, size=-16, channels=1, buffer=512) pygame.mixer.music.load( os.path.join(APP_FOLDER, "resources/sounds/backmusic.ogg")) self.musslider.setMinimum(0) self.musslider.setMaximum(100) musvol = self.musslider.value() pygame.mixer.music.set_volume(musvol / 100) pygame.mixer.music.play(loops=-1) self.musslider.valueChanged.connect(self.musslvalchanged) def musslvalchanged(self): pygame.mixer.music.pause() pygame.mixer.music.set_volume(self.musslider.value() / 100) pygame.mixer.music.unpause() self.musIcon() def musIcon(self): if self.musslider.value() == 0: self.lMusic.setStyleSheet( "QLabel{\n" "border-image: url(:/resources/images/music_off.png)\n" "}") else: self.lMusic.setStyleSheet( "QLabel{\n" "border-image: url(:/resources/images/music_on.png)\n" "}") def chkGrid(self): if len(self.history_matrixs) != 0: lst = self.history_matrixs[-1] else: lst = self.settings().value("gameState") nums = [] for i in range(len(lst)): for j in range(len(lst[0])): if lst[i][j] != 0: nums.append(lst[i][j]) print(nums) return nums def bHelpClicked(self): helpDlg.HelpDialog(self).exec() pyqtSlot() def on_bPlay_clicked(self): self.gridBoard.blockSignals(False) self.init_grid() c.SCORE = 0 self.lScore.setText(str(c.SCORE)) self.matrix = logic.new_game(c.GRID_LEN) self.history_matrixs = [] self.update_grid_cells() pyqtSlot() def on_bExit_clicked(self): self.saveStates() self.movie.jumpToFrame(100) if len(self.chkGrid()) > 2: winLooseDlg.WinLooseDialog(self).dialogTypes("SAVEGAME") sys.exit() # αποθήκευση τιμών της εφαρμογής def saveStates(self): self.settings().setValue("slidervalue", self.sndslider.value()) self.settings().setValue("sliderMvalue", self.musslider.value()) self.settings().setValue("HighScore", self.lHiScore.text()) self.settings().setValue("geometry", self.saveGeometry()) self.settings().setValue("windowState", self.saveState()) self.settings().sync() # Επαναφορά αποθηκευμένων τιμών από το preferencies.ini def restoreStates(self): self.sndslider.setValue(self.settings().value("slidervalue", 40, type=int)) self.musslider.setValue(self.settings().value("sliderMvalue", 50, type=int)) self.lHiScore.setText(self.settings().value("HighScore", "0")) if not self.settings().value("geometry") == None: self.restoreGeometry(self.settings().value("geometry")) if not self.settings().value("windowState") == None: self.restoreState(self.settings().value("windowState")) def saveGame(self): if len(self.history_matrixs) != 0: self.settings().setValue("gameState", self.history_matrixs[-1]) self.settings().setValue("score", self.lScore.text()) def restoreGame(self): self.matrix = self.settings().value("gameState", logic.new_game(c.GRID_LEN)) maxNum = np.max(self.matrix) if logic.winNum < (maxNum): logic.winNum = maxNum * 2 print(logic.winNum) self.update_grid_cells() self.lScore.setText(self.settings().value("score", "0")) def closeEvent(self, e): self.saveStates()
class ClipboardItemButton(PopupToolButton): """ Represents a ClipboardItem in the clipboard stack """ def __init__(self, rscOpener, clipItem=None, parent=None): super().__init__(mode=QToolButton.InstantPopup, parent=parent) self._item = None self._animatedOnce = False self.app = QApplication.instance() self.setObjectName('currentClipItem') self.setIcon(getMimeIcon('unknown')) self.setIconSize(QSize(32, 32)) self.setToolTip(iClipboardNoValidAddress()) self.setEnabled(False) self.rscOpener = rscOpener self.loadingClip = QMovie(':/share/clips/loading.gif') self.loadingClip.finished.connect( functools.partial(self.loadingClip.start)) self.menu.setToolTipsVisible(True) if isinstance(clipItem, ClipboardItem): self.setClipboardItem(clipItem) self.clicked.connect(self.onOpen) self.setAsHomeAction = QAction(getIcon('go-home.png'), iClipItemSetAsHome(), self, triggered=self.onSetAsHome) self.hashmarkAction = QAction(getIcon('hashmarks.png'), iHashmark(), self, triggered=self.onHashmark) self.openAction = QAction(getIcon('terminal.png'), iClipItemOpen(), self, shortcut=QKeySequence('Ctrl+o'), triggered=self.onOpen) self.openWithAppAction = QAction(getIcon('terminal.png'), iClipItemOpenWithApp(), self, triggered=self.onOpenWithProgram) self.openWithDefaultAction = QAction( getIcon('terminal.png'), iClipItemOpenWithDefaultApp(), self, triggered=self.onOpenWithDefaultApp) self.exploreHashAction = QAction( getIcon('folder-open.png'), iClipboardEmpty(), self, shortcut=QKeySequence('Ctrl+e'), triggered=self.onExplore) self.downloadAction = QAction( getIcon('download.png'), iClipboardEmpty(), self, triggered=self.onDownload) self.dagViewAction = QAction( getIcon('ipld-logo.png'), iClipboardEmpty(), self, shortcut=QKeySequence('Ctrl+g'), triggered=self.onDagView) self.ipldExplorerAction = QAction( getIcon('ipld-logo.png'), iClipboardEmpty(), self, shortcut=QKeySequence('Ctrl+i'), triggered=partialEnsure(self.onIpldExplore)) self.editObjectAction = QAction( getMimeIcon('text/plain'), iClipboardEmpty(), self, triggered=self.onTextEdit) self.followFeedAction = QAction( getIcon('atom-feed.png'), iClipItemSubscribeToFeed(), self, triggered=self.onFollowFeed) self.pinAction = QAction( getIcon('pin.png'), iClipboardEmpty(), self, shortcut=QKeySequence('Ctrl+p'), triggered=self.onPin) self.copyPathToCbAction = QAction( getIcon('clipboard.png'), iClipboardEmpty(), self, triggered=self.onCopyPathToClipboard ) self.copyGwPathToCbAction = QAction( getIcon('clipboard.png'), iClipboardEmpty(), self, triggered=self.onCopyGwPathToClipboard ) self.geoAnimation = QPropertyAnimation(self, b'geometry') @property def item(self): return self._item def setClipboardItem(self, item): self.setEnabled(True) self._item = item self.setToolTip(item.path) if item.mimeIcon: # Already set icon from mimetype self.setIcon(item.mimeIcon) ensure(self.updateButton()) else: # MIME type undetected yet (fresh item) disconnectSig(self.loadingClip.frameChanged, self.onLoadingFrame) self.loadingClip.frameChanged.connect(self.onLoadingFrame) self.loadingClip.start() item.mimeTypeDetected.connect(self.mimeDetected) def onLoadingFrame(self, num): if self.isVisible(): self.setIcon(QIcon(self.loadingClip.currentPixmap())) def onHashmark(self): if self.item: ensure(addHashmarkAsync(self.item.fullPath, self.item.basename)) def onSetAsHome(self): self.app.settingsMgr.setSetting(CFG_SECTION_BROWSER, CFG_KEY_HOMEURL, self.item.ipfsPath.ipfsUrl) def onCopyPathToClipboard(self): self.app.setClipboardText(str(self.item.ipfsPath)) def onCopyGwPathToClipboard(self): self.app.setClipboardText(self.item.ipfsPath.publicGwUrl) def onOpenWithProgram(self): self.openWithProgram() def openWithProgram(self, command=None): def onAccept(dlg): prgValue = dlg.textValue() if len(prgValue) in range(1, 512): ensure(self.rscOpener.openWithExternal( self.item.cid, prgValue)) runDialog(ChooseProgramDialog, cmd=command, accepted=onAccept) def onOpenWithDefaultApp(self): if self.item.cid: ensure(self.rscOpener.openWithSystemDefault(self.item.cid)) def mimeDetected(self, mType): if self.loadingClip.state() == QMovie.Running: self.loadingClip.stop() ensure(self.updateButton()) def tooltipMessage(self): statInfo = StatInfo(self.item.stat) message = '{path} (type: {mimetype})'.format( path=self.item.fullPath, mimetype=str(self.item.mimeType) if self.item.mimeType else iUnknown() ) if statInfo.valid: if self.item.mimeType and self.item.mimeType.isDir: message += '\n\nTotal size: {total}, links: {links}'.format( total=sizeFormat(statInfo.totalSize), links=statInfo.numLinks ) else: message += '\n\nTotal size: {total}'.format( total=sizeFormat(statInfo.totalSize) ) else: message += '\n\nNo information on object' return message @ipfsOp async def updateButton(self, ipfsop): if not isinstance(self.item, ClipboardItem): return if self.item.path is None: log.debug('Empty path') return shortened = shortPathRepr(self.item.path) self.menu.clear() action = self.menu.addSection(shortened) action.setToolTip(self.item.fullPath) self.menu.addSeparator() self.menu.addAction(self.openAction) self.menu.addAction(self.openWithAppAction) self.menu.addAction(self.openWithDefaultAction) self.menu.addSeparator() self.menu.addAction(self.setAsHomeAction) self.menu.addAction(self.hashmarkAction) self.menu.addAction(self.downloadAction) self.menu.addSeparator() self.menu.addAction(self.dagViewAction) self.menu.addAction(self.ipldExplorerAction) self.menu.addSeparator() self.menu.addAction(self.pinAction) self.exploreHashAction.setText(iClipItemExplore()) self.openAction.setText(iClipItemOpen()) self.dagViewAction.setText(iClipItemDagView()) self.hashmarkAction.setText(iClipItemHashmark()) self.downloadAction.setText(iClipItemDownload()) self.ipldExplorerAction.setText(iClipItemIpldExplorer()) self.editObjectAction.setText(iEditObject()) self.pinAction.setText(iClipItemPin()) self.copyPathToCbAction.setText(iCopyPathToClipboard()) self.copyGwPathToCbAction.setText(iCopyPubGwUrlToClipboard()) self.setToolTip(self.tooltipMessage()) if not self.item.mimeType: return self.updateIcon(getMimeIcon('unknown')) icon = None if self.item.mimeType.isDir: # It's a directory. Add the explore action and disable # the actions that don't apply to a folder self.menu.addAction(self.exploreHashAction) self.openWithAppAction.setEnabled(False) self.openWithDefaultAction.setEnabled(False) # Look for a favicon icon = await getFavIconFromDir(ipfsop, self.item.ipfsPath) if icon: return self.updateIcon(icon) self.menu.addSeparator() self.menu.addAction(self.editObjectAction) elif self.item.mimeType.isText: self.menu.addSeparator() self.menu.addAction(self.editObjectAction) elif self.item.mimeType.isImage: self.updateIcon(getMimeIcon('image/x-generic'), animate=False) ensure(self.analyzeImage()) elif self.item.mimeType.isAtomFeed: # We have an atom! self.menu.addSeparator() self.menu.addAction(self.followFeedAction) mIcon = getIconFromMimeType(self.item.mimeType) if mIcon: self.updateIcon(mIcon) self.menu.addSeparator() self.menu.addAction(self.copyPathToCbAction) self.menu.addAction(self.copyGwPathToCbAction) self.menu.addSeparator() self.mfsMenu = ipfsop.ctx.currentProfile.createMfsMenu( title=iLinkToMfsFolder(), parent=self) self.mfsMenu.triggered.connect(self.onCopyToMfs) self.menu.addSeparator() self.menu.addMenu(self.mfsMenu) if self.item.mimeType in [mimeTypeDagUnknown, mimeTypeDagPb]: self.updateIcon(getIcon('ipld.png')) self.downloadAction.setEnabled(False) self.mfsMenu.setEnabled(False) def onCopyToMfs(self, action): ensure(self.copyToMfs(action.data())) @ipfsOp async def copyToMfs(self, ipfsop, mfsItem): dest = os.path.join(mfsItem.path, self.item.ipfsPath.basename) try: await ipfsop.client.files.cp( self.item.path, dest ) except aioipfs.APIError: # TODO pass def updateIcon(self, icon, animate=True): self.item.mimeIcon = icon self.setIcon(icon) if animate and not self._animatedOnce: self.animate() self._animatedOnce = True def animate(self): # Geometry animation self.geoAnimation.stop() size = self.size() self.geoAnimation.setDuration(1700) self.geoAnimation.setKeyValueAt( 0, QRect(0, 0, size.width() / 4, size.height() / 4)) self.geoAnimation.setKeyValueAt( 0.4, QRect(0, 0, size.width() / 3, size.height() / 3)) self.geoAnimation.setKeyValueAt( 0.8, QRect(0, 0, size.width() / 2, size.height() / 2)) self.geoAnimation.setKeyValueAt( 1, QRect(0, 0, size.width(), size.height())) self.geoAnimation.setEasingCurve(QEasingCurve.OutElastic) self.geoAnimation.start() @ipfsOp async def analyzeFeed(self, ipfsop): statInfo = StatInfo(self.item.stat) if statInfo.valid and not statInfo.dataLargerThan(megabytes(4)): pass @ipfsOp async def analyzeImage(self, ipfsop): statInfo = StatInfo(self.item.stat) if statInfo.valid: size = statInfo.dataSize if isinstance(size, int): # don't scan anything larger than 4Mb if statInfo.dataLargerThan(megabytes(4)): log.debug('{path}: Image too large, not scanning') return else: # Don't trust this one log.debug('No object info for image, bailing out') return try: data = await ipfsop.catObject(self.item.path) if data is None: return icon = getIconFromImageData(data) if icon: self.updateIcon(icon) # Decode the QR codes in the image if there's any qrDecoder = IPFSQrDecoder() if not qrDecoder: return urls = qrDecoder.decode(data) if isinstance(urls, list): # Display the QR codes in a separate menu menu = qrCodesMenuBuilder(urls, self.app.resourceOpener, parent=self) self.menu.addSeparator() self.menu.addMenu(menu) except aioipfs.APIError: pass def onOpen(self): if self.item: if self.item.mimeType.isWasm and shutil.which('wasmer') and \ self.app.system == 'Linux': # Run with wasmer log.debug('Opening WASM binary from object: {}'.format( self.item.ipfsPath)) return self.openWithProgram( 'xterm -e "wasmer run %f --; ' 'echo WASM program exited with code $?; read e"') ensure(self.rscOpener.open( self.item.ipfsPath, mimeType=self.item.mimeType, openingFrom='clipboardmgr' )) def onExplore(self): if self.item and self.item.cid: self.app.mainWindow.explore(self.item.cid) def onDagView(self): if self.item: view = dag.DAGViewer(self.item.path, self.app.mainWindow) self.app.mainWindow.registerTab( view, iDagViewer(), current=True, icon=getIcon('ipld.png'), tooltip=self.item.path ) else: messageBox(iClipboardEmpty()) def onFollowFeed(self): ensure(self.app.mainWindow.atomButton.atomFeedSubscribe( self.item.path)) async def onIpldExplore(self, *args): """ Open the IPLD explorer application for the current clipboard item """ if not self.item: return mark = await database.hashmarksByObjTagLatest('#dapp-ipldexplorer') if mark: link = os.path.join( mark.path, '#', 'explore', stripIpfs(self.item.path)) self.app.mainWindow.addBrowserTab().browseFsPath(link) else: messageBox('IPLD explorer hashmark not found') def onTextEdit(self): if self.item: ensure(self.rscOpener.open( self.item.ipfsPath, mimeType=self.item.mimeType, editObject=True, openingFrom='clipboardmgr' )) def onPin(self): if self.item: ensure(self.app.ipfsCtx.pin(self.item.path, True, None, qname='clipboard')) def onDownload(self): if self.item: ensure(self.downloadItem(self.item)) @ipfsOp async def downloadItem(self, ipfsop, item): toolbarMain = self.app.mainWindow.toolbarMain button = DownloadProgressButton(item.path, item.stat, parent=self) button.show() action = toolbarMain.insertWidget( toolbarMain.actionStatuses, button) button.task = self.app.ipfsTaskOp(self.downloadItemTask, item, button, action) button.cancelled.connect(lambda: toolbarMain.removeAction(action)) button.downloadFinished.connect( lambda: toolbarMain.removeAction(action)) async def downloadItemTask(self, ipfsop, item, progButton, action): downloadsDir = self.app.settingsMgr.downloadsDir async def progress(path, read, progButton): if divmod(read, 64)[1] == 0: progButton.downloadProgress.emit(read) try: await ipfsop.client.get( item.path, dstdir=downloadsDir, chunk_size=262144, progress_callback=progress, progress_callback_arg=progButton) except aioipfs.APIError: pass else: progButton.downloadFinished.emit()