def show_stable_release_message(self):
dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.WARNING,
Gtk.ButtonsType.OK_CANCEL,
"Mama! New stable version available!")
dialog.format_secondary_text(self.text)
response = dialog.run()
if response == Gtk.ResponseType.OK:
print("Stable release dialog closed by clicking OK button")
dialog.destroy()
self.__download_latest_version()
elif response == Gtk.ResponseType.CANCEL:
print("Stable release dialog closed by clicking CANCEL button")
dialog.destroy()
# Getting data from github API
python类MessageDialog()的实例源码
def action_clicked_cb(self, button):
try:
ele = int(self.builder.get_object("item").get_text())
choice = int(self.builder.get_object("operation").get_active())
state = self.builder.get_object("state")
val = self.map[choice](ele)
if val is False: # Search or Delete Case
dialog = gtk.MessageDialog(None, 0, gtk.MessageType.ERROR,
gtk.ButtonsType.CANCEL, "Value not found ERROR")
dialog.format_secondary_text(
"Element not found in the %s" % self.ds.name)
dialog.run()
dialog.destroy()
else:
val = ele if val is True else None
self.ds.draw(val)
state.set_from_file(self.ds.file_path)
except:
raise
def on_device_open_failed(self, *a):
"""
Called when all (or user-selected) driver fails
to communicate with controller.
Shoudln't be really possible, but something
_has_ to happen in such case.
"""
d = Gtk.MessageDialog(parent=self.window,
flags = Gtk.DialogFlags.MODAL,
type = Gtk.MessageType.ERROR,
buttons = Gtk.ButtonsType.OK,
message_format = _("Failed to open device")
)
d.run()
d.destroy()
self.window.destroy()
def on_btRemoveController_clicked(self, *a):
tvControllers = self.builder.get_object("tvControllers")
d = Gtk.MessageDialog(parent=self.window,
flags = Gtk.DialogFlags.MODAL,
type = Gtk.MessageType.WARNING,
buttons = Gtk.ButtonsType.YES_NO,
message_format = _("Unregister controller?"),
)
d.format_secondary_text(_("You'll lose all settings for it"))
if d.run() == -8:
# Yes
model, iter = tvControllers.get_selection().get_selected()
path = model[iter][0]
try:
os.unlink(path)
except Exception, e:
log.exception(e)
self._needs_restart()
self.load_controllers()
d.destroy()
def entryDialog(self, message, title='', defaultText=''):
# Returns user input as a string or None
# If user does not input text it returns None, NOT AN EMPTY STRING.
dialogWindow = Gtk.MessageDialog(self, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, Gtk.MessageType.INFO, Gtk.ButtonsType.OK_CANCEL, message)
dialogWindow.set_title(title)
dialogBox = dialogWindow.get_content_area()
userEntry = Gtk.Entry()
userEntry.set_text(defaultText)
dialogBox.pack_end(userEntry, False, False, 0)
dialogWindow.show_all()
response = dialogWindow.run()
text = userEntry.get_text()
dialogWindow.destroy()
if (response == Gtk.ResponseType.OK) and (text != ''):
return text
else:
return None
def info_box(self, msg):
dialog = Gtk.MessageDialog(
self.window,
Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
Gtk.MessageType.INFO,
Gtk.ButtonsType.OK,
None)
# markup = "<b>" + msg + "</b>"
markup = msg
dialog.set_markup(markup)
dialog.set_title(_("Info"))
# some secondary text
markup = msg
# dialog.format_secondary_markup(markup)
dialog.show_all()
dialog.run()
dialog.destroy()
def ok_cancel_box(self, msg):
dialog = Gtk.MessageDialog(
None,
Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
Gtk.MessageType.INFO,
Gtk.ButtonsType.OK_CANCEL,
None)
# markup = "<b>" + msg + "</b>"
markup = msg
dialog.set_markup(markup)
dialog.set_title(_("Ok/Cancel"))
# some secondary text
markup = msg
# dialog.format_secondary_markup(markup)
dialog.show_all()
resp = dialog.run()
dialog.destroy()
return resp
def onExportEverythingBtnClicked(self, event):
if not self.currentSelectedExperiment:
return
go = self.glade.get_object
folderChooser = go("export_everything_select_folder")
folderChooser.set_title("Select the directory to which you want to save your experiment in")
folderChooser.set_transient_for(self.window)
response = folderChooser.run()
if response == 0:
dest_path = folderChooser.get_filename()
if not dest_path:
msgdialog = Gtk.MessageDialog(self.window, 1, Gtk.MessageType.INFO, Gtk.ButtonsType.OK, "Please select the target folder and try again")
msgdialog.run()
msgdialog.destroy()
else:
self.exportAllContainers(dest_path)
msgdialog = Gtk.MessageDialog(self.window, 1, Gtk.MessageType.INFO, Gtk.ButtonsType.OK, "Experiment exported")
msgdialog.run()
msgdialog.destroy()
def onExportSingleBtnClicked(self, event):
if not self.currentSelectedExperiment or not self.currentSelectedContainer:
return
go = self.glade.get_object
folderChooser = go("export_everything_select_folder")
folderChooser.set_title("Select the directory to which you want to save your container in")
folderChooser.set_transient_for(self.window)
response = folderChooser.run()
if response == 0:
dest_path = folderChooser.get_filename()
if not dest_path:
msgdialog = Gtk.MessageDialog(self.window, 1, Gtk.MessageType.INFO, Gtk.ButtonsType.OK, "Please select the target folder and try again")
msgdialog.run()
msgdialog.destroy()
else:
self.exportSingleContainer(dest_path)
msgdialog = Gtk.MessageDialog(self.window, 1, Gtk.MessageType.INFO, Gtk.ButtonsType.OK, "Experiment exported")
msgdialog.run()
msgdialog.destroy()
def onImportSingleBtnClicked(self, event):
if not self.currentSelectedExperiment or not self.currentSelectedContainer:
return
go = self.glade.get_object
folderChooser = go("export_everything_select_folder")
folderChooser.set_title("Select the directory where your tree starts from")
folderChooser.set_transient_for(self.window)
response = folderChooser.run()
if response == 0:
source_path = folderChooser.get_filename()
if not source_path:
msgdialog = Gtk.MessageDialog(self.window, 1, Gtk.MessageType.INFO, Gtk.ButtonsType.OK, "Please select the source folder and try again")
msgdialog.run()
msgdialog.destroy()
else:
self.importSingleContainer(source_path)
msgdialog = Gtk.MessageDialog(self.window, 1, Gtk.MessageType.INFO, Gtk.ButtonsType.OK, "Experiment imported")
msgdialog.run()
msgdialog.destroy()
def entry_dialog(parent, message, title=''):
dialog = Gtk.MessageDialog(parent,
Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
Gtk.MessageType.QUESTION, Gtk.ButtonsType.OK_CANCEL, message)
dialog.set_title(title)
dialogBox = dialog.get_content_area()
userEntry = Gtk.Entry()
userEntry.set_size_request(250,0)
dialogBox.pack_end(userEntry, False, False, 0)
dialog.show_all()
response = dialog.run()
text = userEntry.get_text()
dialog.destroy()
if (response == Gtk.ResponseType.OK) and (text != ''):
return text
def __on_import_menu_item_clicked(self, wiget):
"""
Handles Import context menu item clicked event, imports only if Calibre present
:param wiget:
"""
if not os.path.exists("/usr/bin/ebook-convert"):
error_dialog = Gtk.MessageDialog(self.__window, 0, Gtk.MessageType.INFO, Gtk.ButtonsType.OK,
_("Importing is unavailable"))
error_dialog.format_secondary_text(_("Importing requires Calibre eBook reader to be installed."))
error_dialog.run()
error_dialog.destroy()
else:
# Loads file chooser component
file_chooser_component = file_chooser.FileChooserWindow()
(response, filename) = file_chooser_component.show_dialog(importing=True)
# Check if Gtk.Response is OK, means user selected file
if response == Gtk.ResponseType.OK:
print("File selected: " + filename) # Print selected file path to console
# Save current book data
self.__window.save_current_book_data()
# Load new book
self.__window.load_book_data(filename)
def on_delete_statistics(self, widget):
class Dlg(Gtk.MessageDialog):
def __init__(self, first, last, count):
Gtk.MessageDialog.__init__(self, None, Gtk.DialogFlags.MODAL,
Gtk.MessageType.QUESTION,
Gtk.ButtonsType.YES_NO,
_("Delete statistics and test results?"))
self.format_secondary_text(_("This exercise have statistics from %(count)s practise sessions, from %(first)s to %(last)s") % {
'count': count,
'first': first.strftime("%x %X"),
'last': last.strftime("%x %X")})
self.show_all()
fileid = solfege.db.get_fileid(self.m_statistics.m_t.m_P.m_filename)
first = datetime.datetime.fromtimestamp(solfege.db.get_first_timestamp(fileid))
last = datetime.datetime.fromtimestamp(solfege.db.get_last_timestamp(fileid))
count = solfege.db.get_session_count(fileid)
dlg = Dlg(first, last, count)
ret = dlg.run()
if ret == Gtk.ResponseType.YES:
solfege.db.delete_statistics(self.m_statistics.m_t.m_P.m_filename)
self.update()
dlg.destroy()
def load_file(self, filename):
self.m_P = lessonfile.ChordLessonfile(filename)
self.m_P.m_changed = False
if self.m_P.m_questions:
self.m_P._idx = 0
self.set_navinfo()
else:
# Do a little trick to make an empty question
self.m_P.m_questions = [dataparser.Question()]
self.m_P.m_questions[-1].music = lessonfile.Music("", "chord")
self.m_P.m_questions[-1].name = ""
self.m_P._idx = 0
if self.m_P.header.module not in ('idbyname', 'chord', 'chordvoicing'):
dialog = Gtk.MessageDialog(self, Gtk.DialogFlags.MODAL,
Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE,
_("The exercise module '%s' is not supported yet. Cannot edit this file.") % c)
dialog.run()
dialog.destroy()
self.m_P = EditorLessonfile()
self.update_appwin()
def file_open_cb(self, *v):
dialog = Gtk.FileChooserDialog(_("Open..."), self,
Gtk.FileChooserAction.OPEN,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
dialog.set_default_response(Gtk.ResponseType.OK)
if dialog.run() == Gtk.ResponseType.OK:
filename = gu.decode_filename(dialog.get_filename())
try:
self.load_file(filename)
except Exception, e:
dialog.destroy()
m = Gtk.MessageDialog(self, Gtk.DialogFlags.MODAL, Gtk.MessageType.ERROR,
Gtk.ButtonsType.CLOSE,
_("Loading file '%(filename)s' failed: %(msg)s") %
{'filename': filename, 'msg': e})
m.run()
m.destroy()
else:
dialog.destroy()
else:
dialog.destroy()
def add_tasks(self, pcs_files, dirname=''):
'''????????, ????'''
def on_list_dir(info, error=None):
path, pcs_files = info
if error or not pcs_files:
dialog = Gtk.MessageDialog(self.app.window,
Gtk.DialogFlags.MODAL,
Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE,
_('Failed to scan folder to download'))
dialog.format_secondary_text(
_('Please download {0} again').format(path))
dialog.run()
dialog.destroy()
return
self.add_tasks(pcs_files, dirname)
self.check_first()
for pcs_file in pcs_files:
if pcs_file['isdir']:
gutil.async_call(pcs.list_dir_all, self.app.cookie,
self.app.tokens, pcs_file['path'],
callback=on_list_dir)
else:
self.add_task(pcs_file, dirname)
self.check_commit(force=True)
def quit(self, widget, event=None, data=None):
'''Main quit.
@param widget: who sent the signal.
@param event: the event that happened
@param data: optional data to receive.
'''
msg = ("Do you really want to quit?")
dlg = Gtk.MessageDialog(self.window, Gtk.DialogFlags.MODAL, Gtk.MessageType.QUESTION, Gtk.ButtonsType.YES_NO, msg)
dlg.set_default_response(Gtk.ResponseType.YES)
opt = dlg.run()
dlg.destroy()
if opt != Gtk.ResponseType.YES:
return True
Gtk.main_quit()
if self.dasm_process:
self.dasm_process.terminate()
return True
def set_dotcode(self, dotcode, filename=None):
self.openfilename = None
if isinstance(dotcode, unicode):
dotcode = dotcode.encode('utf8')
xdotcode = self.run_filter(dotcode)
if xdotcode is None:
return False
try:
self.set_xdotcode(xdotcode)
except ParseError as ex:
dialog = Gtk.MessageDialog(type=Gtk.MessageType.ERROR,
message_format=str(ex),
buttons=Gtk.ButtonsType.OK)
dialog.set_title('Dot Viewer')
dialog.run()
dialog.destroy()
return False
else:
if filename is None:
self.last_mtime = None
else:
self.last_mtime = os.stat(filename).st_mtime
self.openfilename = filename
return True
def editKeyResponse(self, dialog, response, key):
if response == Gtk.ResponseType.OK:
if dialog.get_text() in self.options:
alertBox = Gtk.MessageDialog(parent=dialog,
flags=Gtk.DialogFlags.MODAL,
type=Gtk.MessageType.ERROR,
buttons=Gtk.ButtonsType.OK,
message_format="Key already exists.")
alertBox.connect('response', self.closeAlert)
alertBox.show_all()
else:
newKey = dialog.get_text()
value = self.options[key]
del self.options[key]
self.options[newKey] = value
for row in self.listStore:
if row[0] == key:
row[0] = newKey
break
if response != Gtk.ResponseType.DELETE_EVENT:
dialog.destroy()
def setSelection(self):
model, rows = self.listView.get_selection().get_selected_rows()
self.selection = ("F", [])
for row in rows:
if model[row.get_indices()[0]][1] == "D":
alertBox = Gtk.MessageDialog(parent=self,
flags=Gtk.DialogFlags.MODAL,
type=Gtk.MessageType.ERROR,
buttons=Gtk.ButtonsType.OK,
message_format="Only multiple files may be selected.")
alertBox.connect(FileListDialog.closeAlert)
alertBox.show_all()
return
self.selection[1].append(self.listStore[row.get_indices()[0]][0])
self.emit('response', Gtk.ResponseType.ACCEPT)
def _combo_changed_clients(self, widget):
ind = widget.get_active()
if ind == -1:
return
else:
dev = self.chromecasts[ind]
if not dev:
return
self.connect_to_chromecast(dev)
if self.cast:
self.cast.wait()
else:
self.clients_combo.set_active(-1)
message = ("Cannot connect to chromecast. You sure you are still connected to the same network?")
win = Gtk.Window(type=Gtk.WindowType.TOPLEVEL)
dialog = Gtk.MessageDialog(win, None, Gtk.MessageType.ERROR,
Gtk.ButtonsType.OK, message)
dialog.run()
dialog.destroy()
def __init__(self, root: Gtk.Window, text: str,
ok_button_text: str = Gtk.STOCK_OK,
cancel_button_text: str = Gtk.STOCK_CANCEL,
header: str = '',
message_type: Gtk.MessageType = Gtk.MessageType.WARNING):
Gtk.MessageDialog.__init__(self, root, 0, message_type=message_type)
self.set_title(header)
self.icon = Gtk.Image()
self.icon.set_from_icon_name(appropriate_icon(message_type), Gtk.IconSize.LARGE_TOOLBAR)
self.text = Gtk.Label(text)
heading = Gtk.Box()
heading.add(self.icon)
heading.add(self.text)
self.get_message_area().add(heading)
self.get_message_area().set_spacing(0)
self.add_button(cancel_button_text, Gtk.ResponseType.CANCEL)
self.add_button(ok_button_text, Gtk.ResponseType.OK)
self.show_all()
def __init__(self, root: Gtk.Window, text: str,
ok_button_text: str = Gtk.STOCK_OK,
header: str = '',
message_type: Gtk.MessageType = Gtk.MessageType.ERROR):
Gtk.MessageDialog.__init__(self, root, 0, message_type=message_type)
self.set_title(header)
self.icon = Gtk.Image()
self.icon.set_from_icon_name(appropriate_icon(message_type), Gtk.IconSize.LARGE_TOOLBAR)
self.text = Gtk.Label(text)
heading = Gtk.Box()
heading.add(self.icon)
heading.add(self.text)
self.get_message_area().add(heading)
self.get_message_area().set_spacing(0)
self.add_button(ok_button_text, Gtk.ResponseType.OK)
self.show_all()
def check_for_save(self, widget):
reply = False
if self.text_buffer.get_modified():
message = "Do you want to save the changes you have made?"
dialog = Gtk.MessageDialog(self.window,
Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
Gtk.MessageType.QUESTION, Gtk.ButtonsType.YES_NO,
message)
dialog.set_title("Save?")
if dialog.run() == Gtk.ResponseType.NO:
reply = False
else:
reply = True
dialog.destroy()
return reply
def emit(self, record):
message = self.format(record)
# Replace all "<>" characters (invalid for markup styles) with html entities.
message = message.replace("<", "<").replace(">", ">")
from gi.repository import Gtk as gtk
if record.levelno <= 20:
message_type = gtk.MessageType.INFO
message_title = "Information"
elif record.levelno <= 30:
message_type = gtk.MessageType.WARNING
message_title = "Warning"
else:
message_type = gtk.MessageType.ERROR
message_title = "Error"
window = gtk.MessageDialog(self.parent_window, type=message_type,
buttons=gtk.ButtonsType.OK)
window.set_markup(str(message))
window.set_title(message_title)
# make sure that the window gets destroyed later
for signal in ("close", "response"):
window.connect(signal, lambda dialog, *args: dialog.destroy())
# accept "destroy" action -> remove window
window.connect("destroy", lambda *args: True)
# show the window, but don't wait for a response
window.show()
def _on_destroy(self, window):
if not self._need_restart: return
self._need_restart = False
msg = _(
'You need to restart the app for the changes to take effect. Restart now?'
)
message_dialog = Gtk.MessageDialog(
None,
Gtk.DialogFlags.DESTROY_WITH_PARENT,
Gtk.MessageType.INFO,
Gtk.ButtonsType.YES_NO,
version.APP_NAME
)
message_dialog.set_position(Gtk.WindowPosition.CENTER)
message_dialog.set_icon_from_file(common.ICON_PATH)
message_dialog.props.secondary_text = msg
response = message_dialog.run()
message_dialog.destroy()
if response == Gtk.ResponseType.YES:
utils.restart_app()
def cb_button_set(self, button):
if (self.custom_width == '') or (self.custom_height == ''):
message_dialog = Gtk.MessageDialog(
self.main_window,
0,
Gtk.MessageType.ERROR,
Gtk.ButtonsType.OK,
_("Error")
)
message_dialog.format_secondary_text(_("You have to set width and height."))
content_area = message_dialog.get_content_area()
content_area.set_property('margin-left', 10)
content_area.set_property('margin-right', 10)
content_area.set_property('margin-top', 10)
content_area.set_property('margin-bottom', 10)
message_dialog.run()
message_dialog.destroy()
return
self.config_save()
def cb_button_save(self, button):
if (self.custom_width == '') or (self.custom_height == ''):
message_dialog = Gtk.MessageDialog(
self.main_window,
0,
Gtk.MessageType.ERROR,
Gtk.ButtonsType.OK,
_("Error")
)
message_dialog.format_secondary_text(_("You have to set width and height."))
content_area = message_dialog.get_content_area()
content_area.set_property('margin-left', 10)
content_area.set_property('margin-right', 10)
content_area.set_property('margin-top', 10)
content_area.set_property('margin-bottom', 10)
message_dialog.run()
message_dialog.destroy()
return
self.config_save()
Gtk.main_quit()
def cb_button_save(self, button):
if (self.custom_width == '') or (self.custom_height == ''):
message_dialog = Gtk.MessageDialog(
self.main_window,
0,
Gtk.MessageType.ERROR,
Gtk.ButtonsType.OK,
_("Error")
)
message_dialog.format_secondary_text(_("You have to set width and height."))
content_area = message_dialog.get_content_area()
content_area.set_property('margin-left', 10)
content_area.set_property('margin-right', 10)
content_area.set_property('margin-top', 10)
content_area.set_property('margin-bottom', 10)
message_dialog.run()
message_dialog.destroy()
return
self.config_save()
Gtk.main_quit()
def cb_button_save(self, button):
if (self.custom_width == '') or (self.custom_height == ''):
message_dialog = Gtk.MessageDialog(
self.main_window,
0,
Gtk.MessageType.ERROR,
Gtk.ButtonsType.OK,
_("Error")
)
message_dialog.format_secondary_text(_("You have to set width and height."))
content_area = message_dialog.get_content_area()
content_area.set_property('margin-left', 10)
content_area.set_property('margin-right', 10)
content_area.set_property('margin-top', 10)
content_area.set_property('margin-bottom', 10)
message_dialog.run()
message_dialog.destroy()
return
self.config_save()
Gtk.main_quit()