def on_btImportSccprofile_clicked(self, *a):
# Create filters
f1 = Gtk.FileFilter()
f1.set_name("SC-Controller Profile or Archive")
f1.add_pattern("*.sccprofile")
f1.add_pattern("*.sccprofile.tar.gz")
# Create dialog
d = Gtk.FileChooserNative.new(_("Import Profile..."),
self.window, Gtk.FileChooserAction.OPEN)
d.add_filter(f1)
if d.run() == Gtk.ResponseType.ACCEPT:
if d.get_filename().endswith(".tar.gz"):
self.import_scc_tar(d.get_filename())
else:
self.import_scc(d.get_filename())
python类FileFilter()的实例源码
def on_file(self, button):
dialog = Gtk.FileChooserDialog("Please choose a file", self,
Gtk.FileChooserAction.OPEN,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
filter_csv = Gtk.FileFilter()
filter_csv.set_name("CSV Files")
filter_csv.add_pattern("*.csv")
dialog.add_filter(filter_csv)
response = dialog.run()
if response == Gtk.ResponseType.OK:
path = dialog.get_filename()
self.data = pd.read_csv(path)
self.verticalbox.remove(self.scrollable_treelist)
self.add_treeview()
dialog.destroy()
def __add_filters(self, dialog, importing):
"""
Adds filters to indicate opening only .epub files.
:param dialog:
"""
if not importing:
self.__add_native(dialog)
if os.path.exists("/usr/bin/ebook-convert"):
self.__add_imports(dialog)
else:
self.__add_imports(dialog)
filter_any = Gtk.FileFilter()
filter_any.set_name(_("Any files"))
filter_any.add_pattern("*")
dialog.add_filter(filter_any)
def provide_dell_recovery_file_chooser_picked(self, widget=None):
"""Called when a file is selected on the add dell-recovery page"""
ok_button = self.builder_widgets.get_object('builder_add_ok')
filefilter = Gtk.FileFilter()
filefilter.add_pattern("*.deb")
self.file_dialog.set_filter(filefilter)
ret = self.run_file_dialog()
if ret is not None:
import apt_inst
import apt_pkg
control = apt_inst.DebFile(ret).control.extractdata("control")
sections = apt_pkg.TagSection(control)
if sections["Package"] != 'dell-recovery':
self.add_dell_recovery_deb = ''
else:
self.add_dell_recovery_deb = ret
if self.add_dell_recovery_deb:
ok_button.set_sensitive(True)
def on_open(self, action):
chooser = Gtk.FileChooserDialog(title="Open dot File",
action=Gtk.FileChooserAction.OPEN,
buttons=(Gtk.STOCK_CANCEL,
Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN,
Gtk.ResponseType.OK))
chooser.set_default_response(Gtk.ResponseType.OK)
chooser.set_current_folder(self.last_open_dir)
filter = Gtk.FileFilter()
filter.set_name("Graphviz dot files")
filter.add_pattern("*.dot")
chooser.add_filter(filter)
filter = Gtk.FileFilter()
filter.set_name("All files")
filter.add_pattern("*")
chooser.add_filter(filter)
if chooser.run() == Gtk.ResponseType.OK:
filename = chooser.get_filename()
self.last_open_dir = chooser.get_current_folder()
chooser.destroy()
self.open_file(filename)
else:
chooser.destroy()
def save_html(self, data):
html = data
chooser = Gtk.FileChooserDialog("Export HTML", None, Gtk.FileChooserAction.SAVE,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_OK, Gtk.ResponseType.OK))
html_filter = Gtk.FileFilter()
html_filter.set_name("HTML Files")
html_filter.add_pattern("*.html")
html_filter.add_pattern("*.htm")
chooser.set_do_overwrite_confirmation(True)
chooser.add_filter(html_filter)
response = chooser.run()
if response == Gtk.ResponseType.OK:
file_name = chooser.get_filename()
if not file_name.endswith(".html"):
file_name += ".html"
file = open(file_name, 'w')
soup = BeautifulSoup(html, "lxml")
file.write(soup.prettify())
file.close()
elif response == Gtk.ResponseType.CANCEL:
pass
chooser.destroy()
self.window.set_sensitive(True)
def import_bookmarks(self):
d = Gtk.FileChooserDialog(_("Import a HTML bookmark file"), self,
Gtk.FileChooserAction.OPEN,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN, Gtk.ResponseType.ACCEPT))
d.set_default_size(int(width), int(height))
filter_html = Gtk.FileFilter()
filter_html.set_name("HTML files")
filter_html.add_mime_type("text/html")
d.add_filter(filter_html)
response = d.run()
if response == Gtk.ResponseType.ACCEPT:
filename = d.get_filename()
d.destroy()
return filename
d.destroy()
def select_image(self, button):
"""
Show a file chooser dialog and let the user to select an image.
"""
dialog = Gtk.FileChooserDialog(_('Please select an image'), self.window, Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
png_filter = Gtk.FileFilter()
png_filter.set_name("PNG files")
png_filter.add_mime_type("image/png")
png_filter.add_pattern("*.png")
dialog.add_filter(png_filter)
response = dialog.run()
if response == Gtk.ResponseType.OK:
self.break_config['image'] = dialog.get_filename()
pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(self.break_config['image'], 16, 16, True)
self.img_break.set_from_pixbuf(pixbuf)
elif response == Gtk.ResponseType.CANCEL:
self.break_config.pop('image', None)
self.img_break.set_from_stock('gtk-missing-image', Gtk.IconSize.BUTTON)
dialog.destroy()
def on_open_file_activate(self, image_menu_item):
"""Opening of a file"""
dialog = Gtk.FileChooserDialog(action=Gtk.FileChooserAction.OPEN)
dialog.add_buttons(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN, Gtk.ResponseType.OK)
dialog.set_transient_for(self.main_widget)
file_filter = Gtk.FileFilter()
file_filter.add_pattern("*.theatre")
dialog.add_filter(file_filter)
dialog.modal = True
answer = dialog.run()
try:
if answer == Gtk.ResponseType.OK:
self._open_file_callback(dialog.get_filename())
finally:
dialog.destroy()
def on_btSaveAs_clicked(self, *a):
# Grab stuff
tvProfiles = self.builder.get_object("tvProfiles")
model, iter = tvProfiles.get_selection().get_selected()
# Determine format
f = Gtk.FileFilter()
if self._needs_package():
f.set_name("SC-Controller Profile Archive")
fmt = "sccprofile.tar.gz"
else:
f.set_name("SC-Controller Profile")
fmt = "sccprofile"
f.add_pattern("*.%s" % (fmt,))
# Create dialog
d = Gtk.FileChooserNative.new(_("Export to File..."),
self.window, Gtk.FileChooserAction.SAVE)
d.add_filter(f)
d.set_do_overwrite_confirmation(True)
# Set default filename
d.set_current_name("%s.%s" % (model[iter][2], fmt))
if d.run() == Gtk.ResponseType.ACCEPT:
fn = d.get_filename()
if len(os.path.split(fn)[-1].split(".")) < 2:
# User wrote filename without extension
fn = "%s.%s" % (fn, fmt)
if self._needs_package():
if self._export_package(model[iter][1], fn):
self.window.destroy()
else:
if self._export(model[iter][1], fn):
self.window.destroy()
def on_button_clicked(self,widget):
dialog =Gtk.FileChooserDialog("Select folder",None,Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,(Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT,Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT))
dialog.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
filter = Gtk.FileFilter()
filter.set_name("Folder")
filter.add_pattern("*") # whats the pattern for a folder
dialog.add_filter(filter)
if dialog.run() == Gtk.ResponseType.ACCEPT:
dialog.hide()
print(dialog.get_filename())
self.button.set_label(dialog.get_filename())
dialog.destroy()
def on_button_clicked(self,widget):
dialog =Gtk.FileChooserDialog("Select folder",None,Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,(Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT,Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT))
dialog.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
filter = Gtk.FileFilter()
filter.set_name("Folder")
filter.add_pattern("*") # whats the pattern for a folder
dialog.add_filter(filter)
if dialog.run() == Gtk.ResponseType.ACCEPT:
dialog.hide()
print(dialog.get_filename())
self.button.set_label(dialog.get_filename())
dialog.destroy()
def add_filters(dialog):
filter_text = Gtk.FileFilter()
filter_text.set_name("JSON files")
filter_text.add_pattern("*.json")
dialog.add_filter(filter_text)
filter_any = Gtk.FileFilter()
filter_any.set_name("Any files")
filter_any.add_pattern("*")
dialog.add_filter(filter_any)
def __add_native(self, dialog):
filter_text = Gtk.FileFilter()
filter_text.set_name(_("ePub files"))
for extension in constants.NATIVE:
filter_text.add_pattern("*" + extension.upper())
filter_text.add_pattern("*" + extension.lower())
dialog.add_filter(filter_text)
def __add_imports(self, dialog):
filter_text = Gtk.FileFilter()
filter_text.set_name(_("Importable files"))
for extension in constants.IMPORTABLES:
filter_text.add_pattern("*" + extension.upper())
filter_text.add_pattern("*" + extension.lower())
dialog.add_filter(filter_text)
def _set_keyfile_filter(dialog):
filter_keys = Gtk.FileFilter()
filter_keys.set_name("Armored keys")
filter_keys.add_pattern("*.asc")
filter_keys.add_pattern("*.key")
filter_keys.add_pattern("*.pub")
dialog.add_filter(filter_keys)
filter_any = Gtk.FileFilter()
filter_any.set_name("Any files")
filter_any.add_pattern("*")
dialog.add_filter(filter_any)
def _set_save_keyfile_filter(dialog):
filter_armor_key = Gtk.FileFilter()
filter_armor_key.set_name("Armored key")
filter_armor_key.add_pattern("*.asc")
dialog.add_filter(filter_armor_key)
filter_binary_key = Gtk.FileFilter()
filter_binary_key.set_name("Encoded key")
filter_binary_key.add_pattern("*.gpg")
dialog.add_filter(filter_binary_key)
def add_filters(self, dialog):
filter_text = Gtk.FileFilter()
filter_text.set_name("Video/Audio files")
filter_text.add_mime_type("video/*")
filter_text.add_mime_type("audio/*")
dialog.add_filter(filter_text)
def add_filters(self, dialog):
filter_text = Gtk.FileFilter()
filter_text.set_name("Text files")
filter_text.add_mime_type("text/plain")
dialog.add_filter(filter_text)
filter_py = Gtk.FileFilter()
filter_py.set_name("Python files")
filter_py.add_mime_type("text/x-python")
dialog.add_filter(filter_py)
filter_any = Gtk.FileFilter()
filter_any.set_name("Any files")
filter_any.add_pattern("*")
dialog.add_filter(filter_any)
def add_filters(self, dialog):
filter_text = Gtk.FileFilter()
filter_text.set_name("Text files")
filter_text.add_mime_type("text/plain")
dialog.add_filter(filter_text)
filter_py = Gtk.FileFilter()
filter_py.set_name("Python files")
filter_py.add_mime_type("text/x-python")
dialog.add_filter(filter_py)
filter_any = Gtk.FileFilter()
filter_any.set_name("Any files")
filter_any.add_pattern("*")
dialog.add_filter(filter_any)
def _add_dir_filters(self, dialog):
"""@brief Add folder filters for folder choosing."""
# TODO: Allow to only choose folders
filter_text = Gtk.FileFilter()
filter_any = Gtk.FileFilter()
filter_any.set_name("Any files")
filter_any.add_pattern("*")
dialog.add_filter(filter_any)
def _add_file_filters(self, dialog):
"""@brief Add file filters for file choosing."""
filter_text = Gtk.FileFilter()
filter_any = Gtk.FileFilter()
filter_any.set_name("Any files")
filter_any.add_pattern("*")
dialog.add_filter(filter_any)
def locate(self, button):
"""
Locate the file and update the database if the user selected one.
"""
directory, filename = os.path.split(self.missing_file)
dialog = Gtk.FileChooserDialog("Please locate the file " + filename, self.parent.window,
Gtk.FileChooserAction.OPEN,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
filter = Gtk.FileFilter()
filter.add_pattern(filename)
filter.set_name(filename)
dialog.add_filter(filter)
path, file_extension = os.path.splitext(self.missing_file)
filter = Gtk.FileFilter()
filter.add_pattern("*" + file_extension)
filter.set_name(file_extension + " files")
dialog.add_filter(filter)
filter = Gtk.FileFilter()
filter.add_pattern("*")
filter.set_name(_("All files"))
dialog.add_filter(filter)
dialog.set_local_only(False)
response = dialog.run()
if response == Gtk.ResponseType.OK:
new_location = dialog.get_filename()
Track.update(file=new_location).where(
Track.file == self.missing_file).execute()
directory, filename = os.path.split(new_location)
importer.import_file(filename, directory, new_location, update=True)
self.parent.refresh_content()
self.dialog.destroy()
self.parent.dialog_open = False
load_file(Track.select().where(Track.file == new_location).get())
play_pause(None, True)
dialog.destroy()
def run_file_chooser(self, action, proposed_name=None):
folder = None
if self.config.has_section('Import-Export'):
folder = self.config.get('Import-Export', 'folder')
title = 'Import'
stock_ok = Gtk.STOCK_OPEN
if action == Gtk.FileChooserAction.SAVE:
stock_ok = Gtk.STOCK_SAVE
title = 'Export'
file_chooser = Gtk.FileChooserDialog(
title, self.gtk_window, action,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
stock_ok, Gtk.ResponseType.OK)
)
filter_sysex = Gtk.FileFilter()
filter_sysex.set_name('Sysex files (.syx)')
filter_sysex.add_pattern('*.syx')
file_chooser.add_filter(filter_sysex)
if Gtk.FileChooserAction.SAVE:
file_chooser.set_do_overwrite_confirmation(True)
if folder:
file_chooser.set_current_folder(folder)
if proposed_name:
file_chooser.set_current_name('%s.syx'%(proposed_name))
result = file_chooser.run()
if result == Gtk.ResponseType.OK:
filename = file_chooser.get_filename()
if not self.config.has_section('Import-Export'):
self.config.add_section('Import-Export')
self.config.set('Import-Export', 'folder', path.dirname(filename))
return (result, file_chooser)
def on_open_activate(self, widget):
#print "open"
# build dialog
self.window_main.set_sensitive(False)
fs = Gtk.FileChooserDialog(parent=self.window_main,
buttons=(Gtk.STOCK_CANCEL,
Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN,
Gtk.ResponseType.OK),
action=Gtk.FileChooserAction.OPEN,
title=_("Open Software Package"))
fs.set_default_response(Gtk.ResponseType.OK)
# set filter
filter = Gtk.FileFilter()
filter.add_pattern("*.deb")
filter.set_name(_("Software packages"))
#fs.add_filter(filter)
fs.set_filter(filter)
# run it!
res = fs.run()
fs.hide()
if res == Gtk.ResponseType.OK:
#print fs.get_filename()
self.open(fs.get_filename())
fs.destroy()
self.window_main.set_sensitive(True)
def cb_button_run(self, button):
self.main_window.hide()
while Gtk.events_pending():
Gtk.main_iteration()
dialog = Gtk.FileChooserDialog(
_("Choose a file to execute"),
self.main_window,
Gtk.FileChooserAction.OPEN,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
dialog.set_current_folder(self.wineprefix_path + '/drive_c')
#filter1 = Gtk.FileFilter()
#filter1.set_name("DOS/Windows executable")
#filter1.add_mime_type("application/x-ms-dos-executable")
#dialog.add_filter(filter1)
file_filter = Gtk.FileFilter()
file_filter.set_name("*.exe, *.msi, *.bat")
file_filter.add_pattern("*.exe")
file_filter.add_pattern("*.msi")
file_filter.add_pattern("*.bat")
dialog.add_filter(file_filter)
response = dialog.run()
if response == Gtk.ResponseType.OK:
file_path = dialog.get_current_folder()
if '.exe' in dialog.get_filename().split('/')[-1]:
command = '$WINELOADER "' + dialog.get_filename() + '"'
elif '.msi' in dialog.get_filename().split('/')[-1]:
command = '$WINELOADER msiexec /i "' + dialog.get_filename() + '"'
elif '.bat' in dialog.get_filename().split('/')[-1]:
command = '$WINELOADER start /unix "' + dialog.get_filename() + '"'
dialog.destroy()
while Gtk.events_pending():
Gtk.main_iteration()
os.system('cd "' + file_path + '" && ' + command)
elif response == Gtk.ResponseType.CANCEL:
dialog.destroy()
self.main_window.show()
def __init__(self, main_view: 'MainView', core: ApartCore, z_options: List[str]):
Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL, expand=True, halign=Gtk.Align.CENTER)
self.main_view = main_view
self.core = core
self.z_options = z_options
self.title = Gtk.Label('', xalign=0.5)
self.title.get_style_context().add_class('dim-label')
self.image_label = Gtk.Label("Image File", xalign=1.0)
self.image_label.get_style_context().add_class('dim-label')
self.image_entry = Gtk.FileChooserButton(title='Select Image File')
image_file_filter = Gtk.FileFilter()
image_file_filter.set_name('Apart Image files')
for z_option in z_options:
image_file_filter.add_pattern('*.apt.*.{}'.format(z_option))
if z_option == 'zst': # also support .zstd from v0.14
image_file_filter.add_pattern('*.apt.*.zstd')
self.image_entry.add_filter(image_file_filter)
self.image_entry.connect('selection-changed', lambda v: self.on_image_select())
self.options = Gtk.Grid(row_spacing=6)
self.options.get_style_context().add_class('new-clone-options')
self.options.attach(self.title, left=0, top=0, width=2, height=1)
self.options.attach(self.image_label, left=0, top=1, width=1, height=1)
self.options.attach(self.image_entry, left=1, top=1, width=1, height=1)
self.cancel_btn = Gtk.Button('Cancel')
self.cancel_btn.connect('clicked', lambda v: self.main_view.show_progress())
self.start_btn = Gtk.Button('Restore Partition')
self.start_btn.set_sensitive(False)
self.start_btn.connect('clicked', lambda v: self.user_confirm())
self.buttons = Gtk.Box(halign=Gtk.Align.END)
self.buttons.get_style_context().add_class('new-clone-buttons')
self.buttons.add(self.cancel_btn)
self.buttons.add(self.start_btn)
self.add(self.options)
self.options.attach_next_to(self.buttons, sibling=self.image_label,
side=Gtk.PositionType.BOTTOM, width=2, height=1)
self.last_part_info = None
def save_pdf(self, html):
chooser = Gtk.FileChooserDialog("Export PDF", None, Gtk.FileChooserAction.SAVE,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_OK, Gtk.ResponseType.OK))
pdf_filter = Gtk.FileFilter()
pdf_filter.add_pattern("*.pdf")
pdf_filter.set_name("PDF Files")
chooser.add_filter(pdf_filter)
chooser.set_do_overwrite_confirmation(True)
response = chooser.run()
if response == Gtk.ResponseType.OK:
file_name = chooser.get_filename()
if not file_name.endswith(".pdf"):
file_name += ".pdf"
try:
pdfkit.from_string(html, file_name, options= {'quiet': '', 'page-size': 'Letter',
'margin-top': '0.75in',
'margin-right': '0.75in',
'margin-bottom': '0.75in',
'margin-left': '0.75in',
'encoding': "UTF-8",
'javascript-delay' : '550',
'no-outline': None})
except:
try:
#Failed so try with no options
pdfkit.from_string(html, file_name)
except:
#Pdf Export failed, show warning message
if not self.pdf_error_warning:
self.pdf_error_warning = True
print("\nRemarkable Error:\tPDF Export Failed!!")
pdf_fail_dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.ERROR,
Gtk.ButtonsType.CANCEL, "PDF EXPORT FAILED")
pdf_fail_dialog.format_secondary_text(
"File export to PDF was unsuccessful.")
pdf_fail_dialog.run()
pdf_fail_dialog.destroy()
elif response == Gtk.ResponseType.CANCEL:
pass
chooser.destroy()
self.window.set_sensitive(True)
def on_button_pressed(self, widget):
dialog = Gtk.FileChooserDialog(title=_("Choose an Image File"),
action=Gtk.FileChooserAction.OPEN,
transient_for=self.get_toplevel(),
buttons=(_("_Cancel"), Gtk.ResponseType.CANCEL,
_("_Open"), Gtk.ResponseType.OK))
filter_text = Gtk.FileFilter()
filter_text.set_name(_("Image files"))
filter_text.add_mime_type("image/*")
dialog.add_filter(filter_text)
backgrounds = "/usr/share/backgrounds"
if os.path.exists(self.value):
dialog.set_filename(self.value)
if os.path.exists(backgrounds):
dialog.add_shortcut_folder(backgrounds)
box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
self.frame = Gtk.Frame(visible=False, no_show_all=True)
preview = Gtk.Image(visible=True)
box.pack_start(self.frame, False, False, 0)
self.frame.add(preview)
dialog.set_preview_widget(box)
dialog.set_preview_widget_active(True)
dialog.set_use_preview_label(False)
box.set_margin_end(12)
box.set_margin_top(12)
box.set_size_request(320, -1)
dialog.connect("update-preview", self.update_icon_preview_cb, preview)
response = dialog.run()
if response == Gtk.ResponseType.OK:
filename = dialog.get_filename()
self.bind_object.set_text(filename)
dialog.destroy()