def show_about(self): """Show About dialog.""" from . import __version__ msg_box = QMessageBox(self) text = ( f"<img src='{image_path('mnelab_logo.png')}'><p>MNELAB {__version__}</p>" ) msg_box.setText(text) mnelab_url = "github.com/cbrnr/mnelab" mne_url = "github.com/mne-tools/mne-python" pkgs = [] for key, value in have.items(): if value: pkgs.append(f"{key} ({value})") else: pkgs.append(f"{key} (not installed)") version = ".".join(str(k) for k in version_info[:3]) text = ( f"<nobr><p>This program uses Python {version} and the following packages:" f"</p></nobr><p>{', '.join(pkgs)}</p>" f"<nobr><p>MNELAB repository: <a href=https://{mnelab_url}>{mnelab_url}</a>" f"</p></nobr><nobr><p>MNE repository: " f"<a href=https://{mne_url}>{mne_url}</a></p></nobr>" f"<p>Licensed under the BSD 3-clause license.</p>" f"<p>Copyright 2017–2021 by Clemens Brunner.</p>") msg_box.setInformativeText(text) msg_box.exec()
def mouse_clicked(self): ## print(f'mouse clicked') mbox = QMessageBox() mbox.setText(f"fock u!") mbox.exec() sys.exit() pass
def generate(size, dir, path, outputName, params): currentTime = datetime.datetime.now() if len(outputName) <= 0: batchName = currentTime.strftime("%b-%d-%Y-%H%M%p%s") else: batchName = util.checkPath(dir, outputName) currentDirectory = os.getcwd() childDirectory = dir + "/" + batchName childDirectory = os.mkdir(childDirectory) record = [['email', 'gender', 'school', 'date']] ID = 1 progressBarStep = int(size / 10) progress = QProgressDialog("Generating Resumes", "Close", 0, 100) progress.setWindowModality(QtCore.Qt.WindowModal) progress.setAutoClose(True) progress.show() while ID <= size: pair = getPair(path, params) record.append(makeDoc(pair, 'control', ID, batchName, params)) record.append(makeDoc(pair, 'test', ID, batchName, params)) ID += 1 progress.setValue(ID) message = QMessageBox() message.setText("Resume generation complete.") message.exec() del pair return record
def deleteEntryini(self): for k in self.inicontents: if k in self.selected["ini"]: errbox = QMessageBox() errbox.setText("Section headers cannot be deleted.") errbox.exec() return confirm = QMessageBox() msg = "The following keys will be deleted:\n" for key in self.selected["ini"]: msg += key[0] + "\n" msg += "Are you sure?" confirm.setText(msg) confirm.setStandardButtons(QMessageBox.Yes | QMessageBox.No) if confirm.exec() != QMessageBox.Yes: return for item in self.selected["ini"]: for section in reversed(self.indices): if (item[1] + 1) > self.indices[section]: self.inicontents[section].pop(item[0]) break msgbox = QMessageBox() msgbox.setText( f"Successfully removed {len(self.selected['ini'])} entries!") msgbox.exec() self.updateTables()
def deleteEntry(self): confirm = QMessageBox() msg = "The following entries will be deleted:\n" for path in self.selected["json"]: msg += path + "\n" msg += "Are you sure?" confirm.setText(msg) confirm.setStandardButtons(QMessageBox.Yes | QMessageBox.No) if confirm.exec() != QMessageBox.Yes: return delfiles = False confirm = QMessageBox() confirm.setText( f"Would you like to delete the folder{'s' if len(self.selected['json']) > 1 else ''} on disk as well?" ) confirm.setStandardButtons(QMessageBox.Yes | QMessageBox.No) if confirm.exec() == QMessageBox.Yes: delfiles = True todel = [] for repo in enumerate(self.repos): if repo[1][0] in self.selected['json']: todel.append(repo[0]) todel.reverse() for i in todel: self.repos.pop(i) if delfiles: os.rmdir(self.repos[i][0]) msgbox = QMessageBox() msgbox.setText(f"Successfully removed {len(todel)} entries!") msgbox.exec() self.updateTables()
def save_file(master, file, delimiter=';'): pathname = master.folder.text() extension = pathname[pathname.index('.'):] try: if extension == ".xlsx": with pd.ExcelWriter(pathname) as writer: file.to_excel(writer, "Dados Brutos", engine='openpyxl', na_rep="NaN", float_format="%.2f") else: decimal = ',' if master.separador == '.' else '.' with open(pathname, 'wb') as writer: file.to_csv(writer, sep=master.separador, na_rep="NaN", float_format="%.2f", decimal=decimal) except PermissionError as Err: x = QMessageBox(QMessageBox.Critical, "Erro de Acesso", "Não foi possível salvar seu arquivo.", buttons=QMessageBox.Ok, parent=master) x.setInformativeText( "O arquivo que voce está tentando sobrescrever já está aberto em outro programa." ) x.setDetailedText(str(Err)) x.exec() raise PermissionError
def addRepoHandler(self): path = self.ui.path.text() for r in enumerate(self.repos): if r[1][0] == path: errbox = QMessageBox() errbox.setText(f"{path} is already listed in {self.json_path}") errbox.exec() return colour = ColorPicker().getColor() hexcolour = '%02x%02x%02x' % ( int(colour[0]), # this is actually so dumb int(colour[1]) if int(colour[0]) != 255 or not int(colour[1]) else int(colour[1]) + 1, int(colour[2]) if int(colour[0]) != 255 or not int(colour[2]) else int(colour[2]) + 1) if self.ui.checkBox.isChecked(): if not re.match(self.urlregexp, self.ui.remote.text()): errbox = QMessageBox() errbox.setText("Invalid URL") errbox.exec() return self.addNewRepo(path, self.ui.remote.text(), hexcolour, self.repos) else: self.addRepoFromExisting(path, hexcolour, self.repos) self.updateTables()
def gui_exception_hook(exc_type, value, traceback): msg = QMessageBox() msg.setIcon(QMessageBox.Critical) msg.setText(str(value)) msg.setInformativeText(''.join( tb.format_exception(exc_type, value, traceback))) msg.setWindowTitle(exc_type.__name__) msg.exec()
def detailedErrorMessage(parent: Optional[QWidget], message: str, detailedInformation: str) -> None: message_box = QMessageBox(QMessageBox.Critical, QApplication.applicationName(), message, QMessageBox.Ok, parent) message_box.setDetailedText(detailedInformation) message_box.exec()
def alert_message(self, header: str, text: str): msg = QMessageBox() msg.setIcon(QMessageBox.Information) msg.setWindowTitle("Alert") msg.setText(header) msg.setInformativeText(text) msg.setStandardButtons(QMessageBox.Ok) msg.setDefaultButton(QMessageBox.Ok) msg.exec()
def information_message_box(win_title: str, msg: str): msg_box = QMessageBox() msg_box.setIcon(QMessageBox.Information) msg_box.setWindowIcon(QIcon(str(pkg_data.LOGO))) msg_box.setText(msg) msg_box.setWindowTitle(win_title) msg_box.setStandardButtons(QMessageBox.Ok) msg_box.exec()
def openhandler(self, mode): if mode == "json": self.changePathJson() elif mode == "ini": self.changePathIni() else: a = QMessageBox() # error handling (tm) a.setText("what the f**k") a.exec() return
def inicializar_db(): try: init_db() except NameError: popup = QMessageBox(QMessageBox.Critical, "Erro", "Erro") popup.setInformativeText( "Arquivo de configuração não foi encontrado") popup.addButton(QMessageBox.Ok) popup.exec() exit(1)
def onEditini(self, item): if "self.updateTables" in inspect.stack( )[2].code_context[0]: # come at me return elif item.column() == 0: secs = 3 # SEX?!?!?!?!?!?!!?! for section in reversed(self.indices): if (item.row() + 1) > self.indices[ section]: # first occurrence of this must always break to avoid repeating itself if item.text() in self.inicontents[section]: pass # no change else: # pad: no. of section headers + no. of entries in previous sections pad = secs + (len(self.inicontents[list(self.indices)[0]]) if secs > 1 else 0) + \ (len(self.inicontents[list(self.indices)[1]]) if secs > 2 else 0) # list is so they can be indexed by num originalKey = list(self.inicontents[section].keys()) \ [item.row() - pad] if not item.text(): errbox = QMessageBox() errbox.setText("Key cannot be empty") errbox.exec() item.setText(originalKey) return self.inicontents[section][ item.text()] = self.ui.initable.item( item.row(), 1).text() self.inicontents[section].pop(originalKey) # this action changes the order of the dict in most cases, so without updating the table # the actual position of items can desync which leads to very buggy behaviour self.updateTables() break secs -= 1 else: # item is a value, which should in theory require less fuckery secs = 3 for section in reversed(self.indices): if (item.row() + 1) > self.indices[section]: key = self.ui.initable.item(item.row(), 0).text() originalVal = self.inicontents[section][key] if item.text() == originalVal: pass else: if not item.text(): errbox = QMessageBox() errbox.setText("Value cannot be empty") errbox.exec() item.setText(originalVal) return # TODO store types of keys and enforce typechecking self.inicontents[section][key] = item.text() self.updateTables() break secs -= 1
def addRepoFromExisting(path, hexcolour, repos, quiet=False): try: repo = git.Repo(path) except git.exc.NoSuchPathError: if quiet: print("Path not found") else: errbox = QMessageBox() errbox.setText("Path not found") errbox.exec() # look we've got error messages and everything return 1 except git.exc.InvalidGitRepositoryError: # means it *has* to be good code if quiet: print("Path does not contain a valid git repository") else: errbox = QMessageBox() errbox.setText("Path does not contain a valid git repository") errbox.exec() return 1 if "origin" in repo.remotes: if not repo.remotes["origin"].url: if quiet: print( "Missing origin URL, how on earth did you manage that?" ) else: errbox = QMessageBox() errbox.setText( "Missing origin URL, how on earth did you manage that?" ) errbox.exec( ) # if anyone manages to get this error i will be very surprised return 1 else: if quiet: print("Repo has no origin") else: errbox = QMessageBox() errbox.setText("Repo has no origin") errbox.exec() return 1 repos.append([path, int(hexcolour, 16)]) if quiet: print(f"Successfully added repository at {path}!") else: msgbox = QMessageBox() msgbox.setText(f"Successfully added repository at {path}!") msgbox.exec() return
def read_file(master, nrows=None, header=None): extension = master.fileformat pathname = master.path.text() try: if extension == ".xlsx": data_df = pd.read_excel(pathname, header=header, engine="openpyxl", nrows=nrows, dtype='str') #elif self.filefomart == ".ods": #data_df = utils.open_odf(self, 14).to_numpy() else: data_df = pd.read_csv(pathname, sep=master.separador, nrows=nrows, dtype='str', header=header, keep_default_na=False) except PermissionError as Err: x = QMessageBox(QMessageBox.Critical, "Erro de Acesso", "Não foi possível salvar seu arquivo.", buttons=QMessageBox.Ok, parent=master) x.setInformativeText( "O arquivo que voce está tentando sobrescrever já está aberto em outro programa." ) x.setDetailedText(str(Err)) x.exec() raise PermissionError except pd.errors.ParserError as Err: x = QMessageBox( QMessageBox.Critical, "Erro de Acesso", "Não foi possível ler o arquivo com o delimitador especificado.", buttons=QMessageBox.Ok, parent=master) x.setInformativeText( "Por favor, tente utilizar um outro tipo de delimitador para os seus dados." ) x.setDetailedText(str(Err)) x.exec() raise pd.errors.ParserError return data_df
def GeneratedDialog(self): self.statusBar().showMessage('Tablecloth generated. Happy rigging!') self.statusBar().removeWidget(self.progress_bar) # Now you can go back to rigging self.ChangeAppStatus(True) mbox = QMessageBox() mbox.setWindowTitle("Tablecloth Generator") mbox.setText("Tablecloth Generated!") mbox.setStandardButtons(QMessageBox.Ok) mbox.exec()
def apply(self, quiet=True): json.dump({ "repos": self.repos, "sysupdates": self.sysupdates }, open(self.json_path, "w")) ini = configparser.ConfigParser() ini.__dict__["_sections"] = self.inicontents ini.write(open(self.ini_path, "w")) if not quiet: msgbox = QMessageBox() msgbox.setText("Done!") msgbox.exec() return
def checkAndSaveChanges(self): old, oldini = {}, {} if open(self.json_path).read() != '': old = json.load(open(self.json_path)) else: old = {"repos": [], "sysupdates": []} if open(self.ini_path).read() != '': oldini = configparser.ConfigParser().read(self.ini_path) else: oldini = {} if (old["repos"] == self.repos and old["sysupdates"] == self.sysupdates) or \ (oldini == self.inicontents): pass else: confirm = QMessageBox() confirm.setText( "You have unsaved changes. Would you like to save them now?") confirm.setStandardButtons(QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel) ret = confirm.exec() if ret == QMessageBox.Cancel: return 1 elif ret == QMessageBox.Yes: self.apply()
def Sl_view_profile_logout(self): msg = QMessageBox(QMessageBox.Question, "Logout", "Siete sicuri di voler effettuare il logout?", QMessageBox.Yes | QMessageBox.No) msg.setButtonText(QMessageBox.Yes, "Sì") if msg.exec() == QMessageBox.Yes: self._net_model.logout() sys.exit()
def _refresh_ui(self): self.label.setText(f"Turn {self.game_state.turn.value}") for y in range(0, GAME_SZIE): for x in range(0, GAME_SZIE): txt = self.game_state.get(x, y).value self._get_button_at(x, y).setText(txt) winner = self.game_state.winner if winner: msgBox = QMessageBox() if winner == TileState.EMPTY: msgBox.setText(f"Tie") else: msgBox.setText(f"Winner is {winner.value}") msgBox.exec() self.game_state.new_game()
def choiceDialog(parent: Optional[QWidget], message: str, labels: Iterable[str], choices: Iterable[T], show_cancel_button=True) -> T: buttons_to_choices = {} message_box = QMessageBox(QMessageBox.Question, QApplication.applicationName(), message, QMessageBox.NoButton, parent) for label, choice in zip(labels, choices): button = message_box.addButton(label, QMessageBox.ActionRole) buttons_to_choices[button] = choice if show_cancel_button: button = message_box.addButton(QMessageBox.Cancel) buttons_to_choices[button] = None message_box.exec() return buttons_to_choices[message_box.clickedButton()]
def createFiles(self): p = Path(f"{self.userFilepath.text()}/{self.projName.text()}") try: p.mkdir() except FileExistsError as exc: msgbox = QMessageBox() msgbox.setText(f"{exc}") msgbox.exec() else: os.chdir(f"{self.userFilepath.text()}\\{self.projName.text()}") if self.pyProj.isChecked(): fileType = "py" elif self.goProj.isChecked(): fileType = "go" with open(f"{self.projName.text()}.{fileType}", "w") as f: f.write(f"# Created on {date.today()}") if self.versionControlFiles.isChecked(): open("README.md", "a").close() open(".gitignore", "a").close()
def salvar_cliente(self): nome = self.entry_nome.text() cpf = self.entry_cpf.text() numero = self.entry_numero.text() endereco = self.entry_endereco.toPlainText() data = { 'nome': nome, 'cpf': cpf, 'numero': numero, 'endereco': endereco } try: self.db.novo_cliente(data) self.status_signal.emit("Salvo") self.limpar() except ValueError as e: popup = QMessageBox(QMessageBox.Critical, "Erro", "Campo Inválido") popup.setInformativeText(str(e)) popup.addButton(QMessageBox.Ok) popup.exec()
def question_message_box(win_title: str, msg: str): msg_box = QMessageBox() msg_box.setIcon(QMessageBox.Question) msg_box.setWindowIcon(QIcon(str(pkg_data.LOGO))) msg_box.setText(msg) msg_box.setWindowTitle(win_title) msg_box.setStandardButtons(QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel) reply = msg_box.exec() return reply
def closeEvent(self, event): close_dialog = QMessageBox(self) close_dialog.setWindowTitle("Team Editor") close_dialog.setText("Do you wish to close the editor?") close_dialog.setStandardButtons(QMessageBox.Yes | QMessageBox.No) response = close_dialog.exec() if response == QMessageBox.Yes: event.accept() else: event.ignore()
def data_filter(master, df, headerdict): '''Recebe um dataframe de strings e filtra as colunas.''' # Filtra no primeiro dataframe as colunas correspondentes a: datas, precipitacao observada/registrada. # se estas colunas nao existirem, provoca um erro e avisa ao usuario. # filtra coluna correspondente a precipitação observada. try: observados = df[df.columns[headerdict["Prec. Observada"]]].str.replace( ',', '.') except: x = QMessageBox(QMessageBox.Warning, "Erro de Seleçao", 'A coluna "Prec. Observada" não foi selecionada.', parent=master) x.addButton(QMessageBox.Ok) x.setInformativeText( "Por favor, verifique a tabela e selecione a coluna correta.") x.exec() raise KeyError # filtra a(s) coluna(s) correspondente(s) a data/hora. if "Data" in headerdict.keys(): try: datetime = df[df.columns[headerdict["Data"]]] + ' ' + df[ df.columns[headerdict["Hora"]]] except: x = QMessageBox( QMessageBox.Warning, "Erro de Seleçao", 'A coluna correspondente a "Hora" não foi selecionada', parent=master) x.addButton(QMessageBox.Ok) x.setInformativeText( "Por favor, verifique a tabela e selecione a coluna correta.") x.exec() raise KeyError elif "Data & Hora" in headerdict.keys(): datetime = df[df.columns[headerdict["Data & Hora"]]] else: x = QMessageBox( QMessageBox.Warning, "Erro de Seleçao", 'A coluna correspondente a "Data" ou "Hora" não foi selecionada', parent=master) x.addButton(QMessageBox.Ok) x.setInformativeText( "Por favor, verifique a tabela e selecione a coluna correta.") x.exec() raise KeyError new_df = pd.DataFrame(observados.to_numpy(), datetime.to_numpy(), columns=["Observado"]) return new_df
def onEditjson(self, item): if item.text() in chain.from_iterable(self.repos) or self.isColour( item.text()): return # no change else: if not item.text(): errbox = QMessageBox() errbox.setText("Path cannot be empty") errbox.exec() item.setText(self.repos[item.row()][0]) return try: git.Repo(item.text()) except git.exc.NoSuchPathError: errbox = QMessageBox() errbox.setText("Path not found") errbox.exec() item.setText(self.repos[item.row()][0]) return except git.exc.InvalidGitRepositoryError: errbox = QMessageBox() errbox.setText("Path does not contain a valid git repository") errbox.exec() item.setText(self.repos[item.row()][0]) return else: self.repos[item.row()][0] = item.text()
def addNewRepo(path, remote, hexcolour, repos, quiet=False): if os.path.exists(path): if os.path.isfile(path) or os.listdir(path): if quiet: print("Path must be an empty directory") else: errbox = QMessageBox() errbox.setText("Path must be an empty directory") errbox.exec() return 1 else: if os.path.exists(path[:path.rindex('/')]): if quiet: print( "Specified folder does not exist but is in a valid directory." ) if input( "Would you like to create the folder and clone the repository there? [Y/N]: " ).lower().strip() != 'y': print("Exiting.") return 1 os.mkdir(path) else: errbox = QMessageBox() errbox.setText( "Specified folder does not exist but is in a valid directory.\n" "Would you like to create the folder and clone the repository there?" ) errbox.setStandardButtons(QMessageBox.Yes | QMessageBox.No) errbox.setDefaultButton(QMessageBox.Yes) if errbox.exec() == QMessageBox.No: return 1 os.mkdir(path) else: if quiet: print("Path not found") else: errbox = QMessageBox() errbox.setText("Path not found") errbox.exec() return 1 os.system(f"git clone '{remote}' '{path}' -v" ) # forget it im not dealing with gitpythons bs repos.append([path, int(hexcolour, 16)]) if quiet: print(f"Repository successfully cloned to {path}") else: msgbox = QMessageBox() msgbox.setText(f"Repository successfully cloned to {path}") msgbox.exec() return
def SeeVersion(self): git_url = "https://raw.githubusercontent.com/vg-mjg/tablecloth-" git_url += "generator/main/version.txt" with urllib.request.urlopen(git_url) as response: url_version = response.read().decode("utf-8") version = "Your version is up to date!" if url_version != VERSION: version = "Your version is outdated." version += "Please check the <a href='https://github.com/vg-mjg/" version += "tablecloth-generator/releases'>Github page</a>" version +=" for updates." version_message = QMessageBox(self) version_message.setWindowTitle("Checking version") version_message.setText("""<h1>Tablecloth generator</h1> <br> <b>Current Version:</b> %s<br> <b>Your Version:</b> %s<br> <i>%s</i> """ % (url_version, VERSION, version)) version_message.exec()