def error(title, message, can_continue=False): """Display an error, and exit if can_continue is False. Displays a message box if PyQt5 is available, otherwise write the error to stderr. """ try: from PyQt5.QtWidgets import QApplication, QMessageBox except ImportError: write = sys.stderr.write write(title + '\n') write(message + '\n') if can_continue: write("Continuing...\n") else: write("Exiting.\n") sys.exit(1) else: app = QApplication([]) box = QMessageBox() box.setIcon(QMessageBox.Critical) box.setWindowTitle("Frescobaldi") box.setText(title) box.setInformativeText(message) if can_continue: box.setStandardButtons(QMessageBox.Abort | QMessageBox.Ignore) box.button(QMessageBox.Ignore).setText("Continue") else: box.setStandardButtons(QMessageBox.Abort) box.button(QMessageBox.Abort).setText("Quit") result = box.exec() app.quit() if not can_continue or result == QMessageBox.Abort: sys.exit(1)
def delete_customer(self): if self._assert_any_checked(): msg_box = QMessageBox(self) msg_box.setIcon(QMessageBox.Question) msg_box.setWindowTitle('Informacja') msg_box.setText('Na pewno usunąć kontrahenta?') msg_box.setStandardButtons(QMessageBox.Yes | QMessageBox.No) buttonY = msg_box.button(QMessageBox.Yes) buttonY.setText('Tak') buttonN = msg_box.button(QMessageBox.No) buttonN.setText('Nie') msg_box.exec_() if msg_box.clickedButton() == buttonY: session = data.Session() element = self.customersTableView.selectionModel( ).selectedIndexes() try: c = session.query(data.Customer).filter( data.Customer.alias == element[0].data()).one() session.delete(c) session.commit() QMessageBox.information(self, 'Informacja', 'Kontrahent usunięty') self._refresh_table() except Exception: QMessageBox.warning(self, 'Błąd', 'Nieznany błąd') finally: session.close()
def btn_learn_on_clicked(self): if not self.pos_xy: QMessageBox.critical(self, "注意", "请先写入您要学习的数字!") return None # 获取要学习的数字learn_num learn_num = self.combo_table.currentIndex() # 弹出确认对话框 qbox = QMessageBox() qbox.setIcon(QMessageBox.Information) qbox.setWindowTitle("请确认") qbox.setText("学习数字 %d ?" % learn_num) qbox.setStandardButtons(QMessageBox.Yes | QMessageBox.No) qbox.setDefaultButton(QMessageBox.No) qbox.button(QMessageBox.Yes).setText("是") qbox.button(QMessageBox.No).setText("否") reply = qbox.exec() # 判断对话框结果,执行程序 if reply == QMessageBox.Yes: learn_result = False learn_dim = self.get_pos_xy() if learn_dim: learn_result = self.learn_db.learn_data(learn_num, learn_dim) else: print('get_pos_xy()函数返回空值') return None if learn_result: QMessageBox.about(self, "提示", "学习成功!") else: QMessageBox.about(self, "提示", "学习失败!") else: return None
def delete_button_function(self, nome, rua, número, bairro): rowid = dm.get_customer_id(nome=nome, rua=rua, número=número, bairro=bairro) msg = QMessageBox() msg.setWindowTitle('Alerta') msg.setText('Você tem certeza que deseja REMOVER esse cliente?') msg.setStandardButtons(QMessageBox.No | QMessageBox.Yes) msg.button(msg.Yes).setText('Sim') msg.button(msg.No).setText('Não') msg.setIcon(QMessageBox.Question) msg.setDefaultButton(QMessageBox.No) self.delete_customer_answer = None msg.buttonClicked.connect(self.delete_customer_popup_clicked) x = msg.exec_() if self.delete_customer_answer == 'Sim': dm.delete_customer(rowid=rowid) self.search_customers() self.search_month_sales() msg = QMessageBox() msg.setWindowTitle('Alerta') msg.setText('Cliente removido com sucesso') msg.exec_() self.item_clicked_dialog.close()
def question_window(text, informative_text="", titel="Sind Sie sicher?", detailed_text="", buttontext_yes="Ja", buttontext_no="Nein", default="yes"): msg = QMessageBox() msg.setIcon(QMessageBox.Question) msg.setWindowIcon(QIcon(logo_path)) msg.setWindowTitle(titel) msg.setText(text) msg.setInformativeText(informative_text) msg.setDetailedText(detailed_text) msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No) if default == "no": msg.setDefaultButton(QMessageBox.No) buttonY = msg.button(QMessageBox.Yes) buttonY.setText(buttontext_yes) buttonN = msg.button(QMessageBox.No) buttonN.setText(buttontext_no) response = msg.exec_() if response == QMessageBox.No: return False if response == QMessageBox.Yes: return True
def _show_del(self, checked): # check item item = self.list.currentItem() # setup box mbox = QMessageBox(QMessageBox.Question, lang['DELETE']['title'], lang['DELETE']['question'], QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel, self) mbox.setWindowIcon(QIcon(DELETE)) # setup 'Yes' button yes = mbox.button(QMessageBox.Yes) yes.setText(lang['DELETE']['yes']) yes.setToolTip(lang['DELETE']['yes_tt']) # setup 'No' button no = mbox.button(QMessageBox.No) no.setText(lang['DELETE']['no']) no.setToolTip(lang['DELETE']['no_tt']) # setup 'Cancel' button cancel = mbox.button(QMessageBox.Cancel) cancel.setText(lang['DELETE']['cancel']) cancel.setToolTip(lang['DELETE']['cancel_tt']) # deleting key = mbox.exec() if key == QMessageBox.Yes: manager.remove_from_desktop(item.text(), True) elif key == QMessageBox.No: manager.remove_from_desktop(item.text()) else: return # change item font font = item.font() font.setBold(False) item.setFont(font) # changing enabled self.__change_enabled()
def buildDrive(self): box = QMessageBox() box.setIcon(QMessageBox.Question) box.setWindowTitle('Create Drive') box.setText('Are you sure you want to create this drive?') box.setStandardButtons(QMessageBox.Yes | QMessageBox.No) box.setDefaultButton(QMessageBox.No) button_yes = box.button(QMessageBox.Yes) button_yes.setText('Ok') button_no = box.button(QMessageBox.No) button_no.setText('Cancel') box.exec_() letter, dr, name = self.letterBox.currentText( ), self.directoryEdit.toPlainText(), self.nameEdit.toPlainText() if dr != '' and name != '': if box.clickedButton() == button_yes: config = cp.ConfigParser() config.read('mappedDrives.ini') section = letter + name sections = config.sections() if section not in sections: MappedDrive(letter, dr, name) config.add_section(section) with open("mappedDrives.ini", "w+") as f: config.write(f) else: box = QMessageBox() box.setIcon(QMessageBox.Warning) box.setWindowTitle('Missing Arguments') box.setText('Please fill all the text boxes') box.setStandardButtons(QMessageBox.Ok) box.setDefaultButton(QMessageBox.Ok) button = box.button(QMessageBox.Ok) button.setText('Close') box.exec_()
def closeEvent(self, event): if self.user: update_user(self.user) # On close, update user wins/losses/draws if self.stack.currentIndex( ) == 1 and not self.game_frame.board.saved: save_prompt = QMessageBox() save_prompt.setWindowIcon( QIcon('./assets/icons/pawn_icon.png')) save_prompt.setIcon(QMessageBox.Warning) save_prompt.setWindowTitle("Chess") save_prompt.setText("Your current progress will be lost.") save_prompt.setInformativeText("Do you want to save the game?") save_prompt.setStandardButtons(QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel) save_prompt.setDefaultButton(QMessageBox.Save) save_prompt.button(QMessageBox.Discard).setText("Don't Save") option = save_prompt.exec_() # Save if option == QMessageBox.Save: self.game_frame.board.save() event.accept() # Don't save elif option == QMessageBox.Discard: event.accept() # Cancel else: event.ignore()
def show_message(self, av, t): """ Show message to user """ m = QMessageBox() m.setText(self.tr(t)) if av == "P": m.setIcon(QMessageBox.Information) m.setWindowTitle("Pregunta") m.setStandardButtons(QMessageBox.Ok | QMessageBox.No) b1 = m.button(QMessageBox.Ok) b1.setText("Si") b2 = m.button(QMessageBox.No) b2.setText("No") else: if av == "W": m.setIcon(QMessageBox.Warning) z = "Atención" elif av == "C": m.setIcon(QMessageBox.Critical) z = "Error" else: m.setIcon(QMessageBox.Information) m.setWindowTitle("Aviso") m.setStandardButtons(QMessageBox.Ok) b = m.button(QMessageBox.Ok) b.setText("Seguir") return m.exec_()
def YesNoAbortDialog(title:str='Question', text:str='Answer?', textYes:str='Yes', textNo:str='No', textAbort:str=None): box = QMessageBox() box.setIcon(QMessageBox.Question) box.setWindowTitle(title) box.setText(text) box.setStandardButtons(QMessageBox.Yes|QMessageBox.No) if (textAbort is not None): box.setStandardButtons(QMessageBox.Yes|QMessageBox.No|QMessageBox.Abort) abortBtn = box.button(QMessageBox.Abort) abortBtn.setText(textAbort) else: abortBtn=None buttonY = box.button(QMessageBox.Yes) buttonY.setText(textYes) buttonN = box.button(QMessageBox.No) buttonN.setText(textNo) box.exec_() if (box.clickedButton()==buttonY): return QMessageBox.Yes elif (box.clickedButton()==buttonN): return QMessageBox.No elif (box.clickedButton()==abortBtn): return QMessageBox.Abort return None
def fileDelete(self): # 弹出提示窗口询问 messageBox = QMessageBox() messageBox.setWindowTitle('提示') messageBox.setText('确定删除该作品?') messageBox.setStandardButtons(QMessageBox.Yes | QMessageBox.No) buttonY = messageBox.button(QMessageBox.Yes) buttonY.setText('确定') buttonN = messageBox.button(QMessageBox.No) buttonN.setText('取消') messageBox.exec_() response = messageBox.clickedButton() if response == buttonN: return # 获取目前选中的列表项的行数 curRow = self.listWidget.currentRow() # 获取作品id iid = self.fileInfoList[curRow]['iid'] response = self.clientSocket.deleteWork(self.token, iid) if response: simpleMessageBox('提示', '删除成功,作品id: ' + iid) # 刷新文件列表 self.downLoadWork_myWork() else: simpleMessageBox('提示', '删除失败')
def validate(self): """Checks if the input is acceptable. If this method returns True, the dialog is accepted when OK is clicked. Otherwise a messagebox could be displayed, and the dialog will remain visible. """ name = self.name.text().strip() self.name.setText(name) if not name: self.name.setFocus() QMessageBox.warning(self, app.caption(_("Warning")), _("Please enter a session name.")) if self._originalName: self.name.setText(self._originalName) return False elif name == '-': self.name.setFocus() QMessageBox.warning(self, app.caption(_("Warning")), _("Please do not use the name '{name}'.".format(name="-"))) return False elif self._originalName != name and name in sessions.sessionNames(): self.name.setFocus() box = QMessageBox(QMessageBox.Warning, app.caption(_("Warning")), _("Another session with the name {name} already exists.\n\n" "Do you want to overwrite it?").format(name=name), QMessageBox.Discard | QMessageBox.Cancel, self) box.button(QMessageBox.Discard).setText(_("Overwrite")) result = box.exec_() if result != QMessageBox.Discard: return False return True
def promptSaveDialog(self, exit_when_done=False): """Save on quit, check if document changes have occurred. Returns: SAVE_DIALOG_OPTIONS['CANCEL'] or SAVE_DIALOG_OPTIONS['DISCARD'] or SAVE_DIALOG_OPTIONS['SAVE'] """ if app().dontAskAndJustDiscardUnsavedChanges: return SAVE_DIALOG_OPTIONS['DISCARD'] if not self.undoStack().isClean(): # document dirty? savebox = QMessageBox( QMessageBox.Warning, "Application", "The document has been modified.\nDo you want to save your changes?", QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel, self.win, Qt.Dialog | Qt.MSWindowsFixedSizeDialogHint | Qt.Sheet) savebox.setWindowModality(Qt.WindowModal) save = savebox.button(QMessageBox.Save) discard = savebox.button(QMessageBox.Discard) cancel = savebox.button(QMessageBox.Cancel) savebox.setDefaultButton(save) savebox.setEscapeButton(cancel) save.setShortcut("Ctrl+S") discard.setShortcut(QKeySequence("D,Ctrl+D")) cancel.setShortcut(QKeySequence("C,Ctrl+C,.,Ctrl+.")) ret = savebox.exec_() del savebox # manual garbage collection to prevent hang (in osx) if ret == QMessageBox.Save: self.exit_when_done = exit_when_done self.actionSaveAsSlot() return SAVE_DIALOG_OPTIONS['SAVE'] elif ret == QMessageBox.Cancel: return SAVE_DIALOG_OPTIONS['CANCEL'] return SAVE_DIALOG_OPTIONS['DISCARD']
def update_button_function(self, client_id): msg = QMessageBox() msg.setWindowTitle('Alerta') msg.setText('Deseja atualizar esse cadastro?') msg.setStandardButtons(QMessageBox.No | QMessageBox.Yes) msg.button(msg.Yes).setText('Sim') msg.button(msg.No).setText('Não') msg.setIcon(QMessageBox.Question) msg.setDefaultButton(QMessageBox.Yes) self.update_customer_answer = None msg.buttonClicked.connect(self.update_customer_popup_clicked) x = msg.exec_() if self.update_customer_answer == 'Sim': novo_nome = self.edit_na_field.text() nova_rua = self.edit_st_field.text() novo_número = self.edit_nu_field.text() novo_bairro = self.edit_ba_field.text() nova_referência = self.edit_re_field.text() novo_telefone = self.edit_ph_field.text() dm.update_customer(rowid=client_id, nome=novo_nome, rua=nova_rua, número=novo_número, bairro=novo_bairro, referência=nova_referência, telefone=novo_telefone) msg = QMessageBox() msg.setWindowTitle('Sucesso') msg.setText('Cadastro atualizado com sucesso') x = msg.exec_() self.search_customers() self.search_month_sales() self.edit_dialog.close() else: pass
def confirm_close_cancel(self): """ Display dialog for close/cancel confirmation :returns: The users decision :rtype: bool """ message = _('Currently creating new container!\nDo you really want to quit?') mb = QMessageBox(QMessageBox.Question, '', message, QMessageBox.Ok | QMessageBox.Cancel, self) mb.button(QMessageBox.Ok).setText(_('Quit')) return mb.exec_() == QMessageBox.Ok
def confirm_close(self): """ Inform about opened container and ask for confirmation to close & quit """ message = _('<b>{device_name}</b> >> {container_path}\n' 'is currently <b>unlocked</b>,\n' 'Close Container now and quit?').format(device_name=self.luks_device_name, container_path=self.encrypted_container) mb = QMessageBox(QMessageBox.Question, '', message, QMessageBox.Ok | QMessageBox.Cancel, self) mb.button(QMessageBox.Ok).setText(_('Quit')) if mb.exec_() == QMessageBox.Ok: self.do_close_container(shutdown=True)
def base_except_hook(exc_type, exc_value, exc_traceback): """ Used to handle all uncaught exceptions. :type exc_type: class :type exc_value: Exception :type exc_traceback: Traceback """ global app global box if issubclass(exc_type, KeyboardInterrupt): app.quit() else: if not box: m1 = 'This is embarrassing ...\n\n' \ 'A critical error has just occurred. ' \ 'Eddy will continue to work, however a reboot is highly recommended.' m2 = 'If the problem persists please <a href="{}">submit a bug report</a>.'.format(BUG_TRACKER) m3 = ''.join(traceback.format_exception(exc_type, exc_value, exc_traceback)) box = QMessageBox() box.setIconPixmap(QPixmap(':/images/eddy-sad')) box.setWindowIcon(QIcon(':/images/eddy')) box.setWindowTitle('Unhandled error!') box.setText(m1) box.setInformativeText(m2) box.setDetailedText(m3) box.setStandardButtons(QMessageBox.Close|QMessageBox.Ok) buttonOk = box.button(QMessageBox.Ok) buttonOk.setText('Close') buttonQuit = box.button(QMessageBox.Close) buttonQuit.setText('Quit {}'.format(APPNAME)) connect(buttonOk.clicked, box.close) connect(buttonQuit.clicked, app.quit) # noinspection PyArgumentList QApplication.beep() box.exec_() box = None
def confirmDestructive(self): mb = QMessageBox(self.widget) mb.setIcon(QMessageBox.Warning) mb.setInformativeText("The plugin you are trying to install\ has already been installed. Replace the currently installed one?") mb.setStandardButtons(QMessageBox.No | QMessageBox.Yes) mb.exec_() return mb.clickedButton() == mb.button(QMessageBox.Yes)
def handle_exception(name, view): """Called when a snippet raises a Python exception. Shows the error message and offers the option to edit the offending snippet. """ import sys, traceback exc_type, exc_value, exc_traceback = sys.exc_info() tb = traceback.extract_tb(exc_traceback) while tb and tb[0][0] != "<snippet>": del tb[0] msg = ''.join(traceback.format_list(tb) + traceback.format_exception_only(exc_type, exc_value)) dlg = QMessageBox(QMessageBox.Critical, _("Snippet error"), msg, QMessageBox.Ok | QMessageBox.Cancel) dlg.button(QMessageBox.Ok).setText(_("Edit Snippet")) dlg.setDefaultButton(QMessageBox.Cancel) dlg.setEscapeButton(QMessageBox.Cancel) if dlg.exec_() != QMessageBox.Ok: return # determine line number if exc_type is SyntaxError: lineno = exc_value.lineno elif tb: lineno = tb[0][1] else: lineno = None import panelmanager from . import edit widget = panelmanager.manager(view.window()).snippettool.widget() textedit = edit.Edit(widget, name).text if lineno is not None: # convert to line number in full snippet text for block in cursortools.all_blocks(textedit.document()): if block.text().startswith('-*- '): lineno += 1 else: break block = textedit.document().findBlockByNumber(lineno-1) if block.isValid(): textedit.setTextCursor(QTextCursor(block))
def on_new_topfolder(self): logger.info("User initiates top-level folder creation") message_box = QMessageBox( QMessageBox.Question, "Create Folder", "Create folder in the default location?", QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel, self.window() ) message_box.button(QMessageBox.No).setText("Create elsewhere") # TODO: i18n result = message_box.exec_() self.window().app.monitor.suspend() if result == QMessageBox.Yes: logger.debug("User creates a new top-level folder.") self.__createFolder(None) elif result == QMessageBox.No: logger.debug("User creates a new folder and chose to create it elsewhere") path = QFileDialog.getExistingDirectory( self.window(), "Where should the folder be created?" ) if path != "": path = str(path) name = os.path.basename(path) folder = model.Folder(name, path=path) new_item = ak_tree.FolderWidgetItem(None, folder) self.treeWidget.addTopLevelItem(new_item) self.configManager.folders.append(folder) self.window().app.config_altered(True) self.window().app.monitor.unsuspend() else: logger.debug("User canceled top-level folder creation.") self.window().app.monitor.unsuspend()
def maybeSave(self): """Save on quit, check if document changes have occured.""" if app().dontAskAndJustDiscardUnsavedChanges: return True if not self.undoStack().isClean(): # document dirty? savebox = QMessageBox(QMessageBox.Warning, "Application", "The document has been modified.\nDo you want to save your changes?", QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel, self.win, Qt.Dialog | Qt.MSWindowsFixedSizeDialogHint | Qt.Sheet) savebox.setWindowModality(Qt.WindowModal) save = savebox.button(QMessageBox.Save) discard = savebox.button(QMessageBox.Discard) cancel = savebox.button(QMessageBox.Cancel) save.setShortcut("Ctrl+S") discard.setShortcut(QKeySequence("D,Ctrl+D")) cancel.setShortcut(QKeySequence("C,Ctrl+C,.,Ctrl+.")) ret = savebox.exec_() del savebox # manual garbage collection to prevent hang (in osx) if ret == QMessageBox.Save: return self.actionSaveAsSlot() elif ret == QMessageBox.Cancel: return False return True
def queryCloseDocument(self, doc): """Return True whether a document can be closed. When no job is running, True is immediately returned. When a job is running, the user is asked whether to abort the job (not for autocompile ("hidden") jobs). """ job = jobmanager.job(doc) if not job or not job.is_running() or jobattributes.get(job).hidden: return True msgbox = QMessageBox(QMessageBox.Warning, _("Warning"), _("An engrave job is running for the document \"{name}\".\n" "Do you want to abort the running job?").format(name=doc.documentName()), QMessageBox.Abort | QMessageBox.Cancel, self.mainwindow()) abort_button = msgbox.button(QMessageBox.Abort) signal = lambda: abort_button.click() job.done.connect(signal) msgbox.exec_() job.done.disconnect(signal) return msgbox.clickedButton() == abort_button
def __init__(self, parent, callback, virtual_stack_callback, last_dir, appdata, dragged_files=None): super(Import, self).__init__(parent) self.ui = Ui_Dialog() self.ui.setupUi(self) self.last_dir = last_dir self.callback = callback self.appdata = appdata self.virtual_stack_callback = virtual_stack_callback # Connect up the buttons for movin gthe rows around # self.ui.pushButtonUp.clicked.connect(self.move_up) # self.ui.pushButtonDown.clicked.connect(self.move_down) # Setup signals self.ui.pushButtonCancel.clicked.connect(self.on_cancel) self.ui.pushButtonChooseFile.clicked.connect(self.on_choose_files) self.ui.pushButtonChoseDir.clicked.connect(self.on_load_virtual_stack) self.ui.pushButtonOK.clicked.connect(self.on_ok) self.ui.checkBoxAllSameType.clicked.connect(self.on_all_same_type) self.type_combo_boxes = None self.ui.virtualStackWidget.hide() self.ui.pushButtonFilter.clicked.connect(self.filter_virtual_stack) # Setup folder filtering self.ui.lineEditFolderFilter.editingFinished.connect(self.set_folder_filter_pattern) # Create the table self.files_to_open = [] self.folder_include_pattern = None self.vs_file_list = [] self.vs_file_list_to_ignore = set() self.use_virtual_stack = False self.all_same_type = False if dragged_files: self.files_to_open = dragged_files # If one path is dropped onto the main window and it's a directory, as if we want to load a stack of slices if len(dragged_files) == 1 and os.path.isdir(dragged_files[0]): # use_folder_of_slices = QtGui.QMessageBox.question(parent, 'Choose data type?', # "Load individual 2D slices from folder (yes)\n" # "Load multiple image volumes (No)", # 'Hello' | QtGui.QMessageBox.No) box = QMessageBox() box.setIcon(QMessageBox.Question) box.setWindowTitle('Choose data type') box.setText('Load individual 2D slices from folder, or load multiple single images volumes?') box.setStandardButtons(QMessageBox.Yes | QMessageBox.No) button_y = box.button(QMessageBox.Yes) button_y.setText('Satack of 2D image slices') button_n = box.button(QMessageBox.No) button_n.setText('Load multiple 3D image volumes') box.exec_() if box.clickedButton() == button_y: self.setWindowTitle("Load stack of 2D slices") self.load_virtual_stack(dragged_files[0]) else: self.populate_file_list() self.setWindowTitle("Load image volumes") else: self.populate_file_list() self.setWindowTitle("Load image volumes") else: self.populate_file_list() self.setWindowTitle("Load image volumes") self.show()