def openDialog(self): od = QFileDialog(self, 'Open MaLPi drive data directory') od.setAcceptMode(QFileDialog.AcceptOpen) od.setFileMode(QFileDialog.Directory) od.setOption(QFileDialog.DontUseNativeDialog, True) # Try to select multiple files and directories at the same time in QFileDialog if False: l = od.findChild(QListView, "listView") if l is not None: l.setSelectionMode(QAbstractItemView.MultiSelection) t = od.findChild(QTreeView) if t is not None: t.setSelectionMode(QAbstractItemView.MultiSelection) nMode = od.exec() if nMode == QDialog.Accepted: _fnames = od.selectedFiles() # QStringList try: if 1 == len(_fnames) and os.path.isdir(_fnames[0]): self.loadData(_fnames[0]) elif 0 != len(_fnames): self.statusBar().showMessage( "Formats other than MaLPi and Tub are not yet supported" ) except Exception as ex: msg = "Error loading data: {}".format(str(ex)) self.statusBar().showMessage(msg) print(msg)
def open_file_dialog(self): options = QFileDialog.Options() options |= QFileDialog.DontUseNativeDialog options |= QFileDialog.ShowDirsOnly dialog = QFileDialog(self) dialog.setFileMode(QFileDialog.DirectoryOnly) dialog.setOptions(options) file_view = dialog.findChild(QListView, 'listView') # to make it possible to select multiple directories: if file_view: file_view.setSelectionMode(QAbstractItemView.ExtendedSelection) f_tree_view = dialog.findChild(QTreeView) if f_tree_view: f_tree_view.setSelectionMode(QAbstractItemView.ExtendedSelection) if dialog.exec(): paths = dialog.selectedFiles() for patient_data_directory in paths: patient_identifier = os.path.basename(patient_data_directory) if patient_identifier not in self.patient_data_sets: dp_file_path = os.path.join(patient_data_directory, 'result_images', 'exported_data', 'diffusion_parameters.mat') if os.path.exists(dp_file_path): data = loadmat(dp_file_path) self.load_data(patient_identifier, data) else: error_dialog = QtWidgets.QErrorMessage() error_dialog.showMessage( f'File path error: {patient_data_directory} does not contain diffusion ' f'parameters') error_dialog.exec_()
def from_folder(self): file_dialog = QFileDialog() file_dialog.setFileMode(QFileDialog.DirectoryOnly) file_dialog.setOption(QFileDialog.DontUseNativeDialog, True) file_view = file_dialog.findChild(QListView, 'listView') if file_view: file_view.setSelectionMode(QAbstractItemView.MultiSelection) f_tree_view = file_dialog.findChild(QTreeView) if f_tree_view: f_tree_view.setSelectionMode(QAbstractItemView.MultiSelection) if file_dialog.exec(): for path in file_dialog.selectedFiles(): self.add_gallery(path, os.path.split(path)[1])
def select_folders(): file_dialog = QFileDialog() file_dialog.setFileMode(QFileDialog.DirectoryOnly) file_dialog.setOption(QFileDialog.DontUseNativeDialog, True) file_view = file_dialog.findChild(QListView, 'listView') if file_view: file_view.setSelectionMode(QAbstractItemView.MultiSelection) f_tree_view = file_dialog.findChild(QTreeView) if f_tree_view: f_tree_view.setSelectionMode(QAbstractItemView.MultiSelection) paths = [] if file_dialog.exec() == QDialog.Accepted: paths = file_dialog.selectedFiles() return paths
def show_ui(self): file_dialog = QFileDialog(self, self.caption, self.default_dir) file_dialog.setFileMode(QFileDialog.DirectoryOnly) file_dialog.setDirectory(self.default_dir) file_dialog.setOption(QFileDialog.DontUseNativeDialog, True) file_view = file_dialog.findChild(QListView, 'listView') # to make it possible to select multiple directories: file_view.setSelectionMode(QAbstractItemView.MultiSelection) f_tree_view = file_dialog.findChild(QTreeView) f_tree_view.setSelectionMode(QAbstractItemView.MultiSelection) # execute the modified file dialog and return result self.close_later.emit() if file_dialog.exec(): self.file_names = file_dialog.selectedFiles()
def on_click(self): file_dialog = QFileDialog() file_dialog.setFileMode(QFileDialog.DirectoryOnly) file_dialog.setOption(QFileDialog.DontUseNativeDialog, True) file_view = file_dialog.findChild(QListView, 'listView') # to make it possible to select multiple directories: if file_view: file_view.setSelectionMode(QAbstractItemView.MultiSelection) f_tree_view = file_dialog.findChild(QTreeView) if f_tree_view: f_tree_view.setSelectionMode(QAbstractItemView.MultiSelection) file_dialog = QFileDialog() file_dialog.setFileMode(QFileDialog.DirectoryOnly) file_dialog.setOption(QFileDialog.DontUseNativeDialog, True) file_view = file_dialog.findChild(QListView, 'listView') if file_dialog.exec(): sourceFolder = file_dialog.selectedFiles() return sourceFolder
class Open_files(QWidget): def __init__(self): super(QWidget, self).__init__() self.layout = QHBoxLayout(self) self.file_dialog = QFileDialog() self.file_dialog.setWindowFlags(Qt.Widget) self.file_dialog.setModal(False) self.file_dialog.setOption(QFileDialog.DontUseNativeDialog) # Remove open and cancel button from widget self.buttonBox = self.file_dialog.findChild(QDialogButtonBox, "buttonBox") self.buttonBox.clear() # Only open following file types # self.file_dialog.setNameFilter("Images (*.czi *.nd2 *.tiff *.tif *.jpg *.png)") self.file_dialog.setNameFilter( "Images (*.czi *.ome.tiff *ome.tif *.tiff *.tif)") self.layout.addWidget(self.file_dialog) self.file_dialog.currentChanged.connect(self.open_path) def open_path(self, path): if os.path.isfile(path): # remove exiting layers from napari viewer.layers.select_all() viewer.layers.remove_selected() # get the metadata md, addmd = imf.get_metadata(path) # temporary workaround for slider / floating point issue # https://forum.image.sc/t/problem-with-dimension-slider-when-adding-array-as-new-layer-for-ome-tiff/39092/2?u=sebi06 md['XScale'] = np.round(md['XScale'], 3) md['YScale'] = np.round(md['YScale'], 3) md['ZScale'] = np.round(md['ZScale'], 3) # get AICSImageIO object using the python wrapper for libCZI (if file is CZI) img = AICSImage(path) stack = img.get_image_data() if md['ImageType'] == 'czi': use_pylibczi = True if md['ImageType'] == 'ometiff': use_pylibczi = False add_napari(stack, md, blending='additive', gamma=0.85, verbose=True, use_pylibczi=use_pylibczi, rename_sliders=True)
def requestOpenFileOrDir ( parent=None, caption='', directory='', filter='All Files ( * )', initialFilter='', options=None ): def updateText (): # update the contents of the line edit widget with the selected files selected = [] for index in view.selectionModel ().selectedRows (): selected.append ( '"{}"'.format ( index.data () ) ) lineEdit.setText ( ' '.join ( selected ) ) dialog = QFileDialog ( parent, caption = caption ) dialog.setFileMode ( QFileDialog.ExistingFiles ) if options: dialog.setOptions ( options ) dialog.setOption ( QFileDialog.DontUseNativeDialog, True ) if directory: dialog.setDirectory ( directory ) if filter: dialog.setNameFilter ( filter ) if initialFilter: dialog.selectNameFilter ( initialFilter ) # by default, if a directory is opened in file listing mode, # QFileDialog.accept() shows the contents of that directory, but we # need to be able to "open" directories as we can do with files, so we # just override accept() with the default QDialog implementation which # will just return exec_() dialog.accept = lambda: QtWidgets.QDialog.accept ( dialog ) # there are many item views in a non-native dialog, but the ones displaying # the actual contents are created inside a QStackedWidget; they are a # QTreeView and a QListView, and the tree is only used when the # viewMode is set to QFileDialog.Details, which is not this case stackedWidget = dialog.findChild ( QtWidgets.QStackedWidget ) view = stackedWidget.findChild ( QtWidgets.QListView ) view.selectionModel ().selectionChanged.connect ( updateText ) lineEdit = dialog.findChild ( QtWidgets.QLineEdit ) # clear the line edit contents whenever the current directory changes dialog.directoryEntered.connect ( lambda: lineEdit.setText ( '' ) ) dialog.exec_ () return dialog.selectedFiles ()
def addFolderTriggered(self): no_native = not self.app.prefs.use_native_dialogs title = tr("Select a folder to add to the scanning list") file_dialog = QFileDialog(self, title, self.lastAddedFolder) file_dialog.setFileMode(QFileDialog.DirectoryOnly) file_dialog.setOption(QFileDialog.DontUseNativeDialog, no_native) if no_native: file_view = file_dialog.findChild(QListView, "listView") if file_view: file_view.setSelectionMode(QAbstractItemView.MultiSelection) f_tree_view = file_dialog.findChild(QTreeView) if f_tree_view: f_tree_view.setSelectionMode(QAbstractItemView.MultiSelection) if not file_dialog.exec(): return paths = file_dialog.selectedFiles() self.lastAddedFolder = paths[-1] [self.app.model.add_directory(path) for path in paths] [self.recentFolders.insertItem(path) for path in paths]
def on_browseFolders_clicked(self, widget): index = self.usbDevicesChooser.currentIndex() file_dialog = QFileDialog() file_dialog.setFileMode(QFileDialog.DirectoryOnly) file_dialog.setOption(QFileDialog.DontUseNativeDialog, True) file_view = file_dialog.findChild(QListView, 'listView') if file_view: file_view.setSelectionMode(QAbstractItemView.MultiSelection) ftree_view = file_dialog.findChild(QTreeView) if ftree_view: ftree_view.setSelectionMode(QAbstractItemView.MultiSelection) file_dialog.setDirectory(self.usbDevices[index].getPath()) if file_dialog.exec(): paths = file_dialog.selectedFiles() self.pathToFolders.setText(";".join(paths))
class Open_files(QWidget): def __init__(self): super(QWidget, self).__init__() self.layout = QHBoxLayout(self) self.file_dialog = QFileDialog() self.file_dialog.setWindowFlags(Qt.Widget) self.file_dialog.setModal(False) self.file_dialog.setOption(QFileDialog.DontUseNativeDialog) # Remove open and cancel button from widget self.buttonBox = self.file_dialog.findChild(QDialogButtonBox, "buttonBox") self.buttonBox.clear() # Only open following file types self.file_dialog.setNameFilter( "Images (*.czi *.ome.tiff *ome.tif *.tiff *.tif)") self.layout.addWidget(self.file_dialog) self.file_dialog.currentChanged.connect(self.open_path) def open_path(self, path): if os.path.isfile(path): # remove exitings layers from napari viewer.layers.select_all() viewer.layers.remove_selected() # get the metadata md, addmd = imf.get_metadata(path) # add the metadata and adapt the table display mdbrowser.update_metadata(md) mdbrowser.update_style() use_dask = checkbox.cbox.isChecked() print('Use Dask : ', use_dask) # get AICSImageIO object img = AICSImage(path) if use_dask: stack = img.dask_data if not use_dask: stack = img.get_image_data() # add the image stack to the napari viewer show_image_napari(stack, md, blending='additive', gamma=0.85, rename_sliders=True)
def ab_clicked(self): file_dialog = QFileDialog() file_dialog.setFileMode(QFileDialog.DirectoryOnly) file_dialog.setDirectory(self.mainwindow.options.get_default_last_folder_opened()) file_dialog.setOption(QFileDialog.DontUseNativeDialog, True) file_view = file_dialog.findChild(QListView, 'listView') # to make it possible to select multiple directories: if file_view: file_view.setSelectionMode(QAbstractItemView.MultiSelection) f_tree_view = file_dialog.findChild(QTreeView) if f_tree_view: f_tree_view.setSelectionMode(QAbstractItemView.MultiSelection) if file_dialog.exec(): folders = file_dialog.selectedFiles() if len(folders) != 0: for folder in folders: parent_folder = os.path.dirname(r"{}".format(folder)) self.mainwindow.options.save_user_defaults(music_folder=folder, last_folder_opened=parent_folder) self.folder_list.addItem(folder) self.folder_list.sortItems()
def btnChooseDirs_clicked(self): # https://stackoverflow.com/questions/38252419/how-to-get-qfiledialog-to-select-and-return-multiple-folders # just copied :) file_dialog = QFileDialog() file_dialog.setFileMode(QFileDialog.DirectoryOnly) file_dialog.setOption(QFileDialog.DontUseNativeDialog, True) file_dialog.setDirectory(self.sett['/Private settings/Load kinetics last path']) file_view = file_dialog.findChild(QListView, 'listView') # to make it possible to select multiple directories: if file_view: file_view.setSelectionMode(QAbstractItemView.MultiSelection) f_tree_view = file_dialog.findChild(QTreeView) if f_tree_view: f_tree_view.setSelectionMode(QAbstractItemView.MultiSelection) if file_dialog.exec(): for path in file_dialog.selectedFiles(): head, tail = os.path.split(path) head2, tail2 = os.path.split(head) name = os.path.join(tail2, tail) self.sett['/Private settings/Load kinetics last path'] = head if name not in self.lwFolders.item_names: self.lwFolders.addItem(name, path)
class FileBrowser(QWidget): def __init__(self, defaultfolder=r'c:\Zen_Output'): super(QWidget, self).__init__() self.layout = QHBoxLayout(self) self.file_dialog = QFileDialog() self.file_dialog.setWindowFlags(Qt.Widget) self.file_dialog.setModal(False) self.file_dialog.setOption(QFileDialog.DontUseNativeDialog) self.file_dialog.setDirectory(defaultfolder) # remove open and cancel button from widget self.buttonBox = self.file_dialog.findChild(QDialogButtonBox, "buttonBox") self.buttonBox.clear() # only show the following file types self.file_dialog.setNameFilter("Images (*.czi *.ome.tiff *ome.tif *.tiff *.tif)") self.layout.addWidget(self.file_dialog) self.file_dialog.currentChanged.connect(open_image_stack)
class Open_files(QWidget): def __init__(self): super(QWidget, self).__init__() self.layout = QHBoxLayout(self) self.file_dialog = QFileDialog() self.file_dialog.setWindowFlags(Qt.Widget) self.file_dialog.setModal(False) self.file_dialog.setOption(QFileDialog.DontUseNativeDialog) # Remove open and cancel button from widget self.buttonBox = self.file_dialog.findChild(QDialogButtonBox, "buttonBox") self.buttonBox.clear() # Only open following file types # self.file_dialog.setNameFilter("Images (*.czi *.nd2 *.tiff *.tif *.jpg *.png)") self.file_dialog.setNameFilter( "Images (*.czi *.ome.tiff *ome.tif *.tiff *.tif)") self.layout.addWidget(self.file_dialog) self.file_dialog.currentChanged.connect(self.open_path) def open_path(self, path): if os.path.isfile(path): # remove exiting layers from napari viewer.layers.select_all() viewer.layers.remove_selected() # get the metadata md, addmd = imf.get_metadata(path) # get AICSImageIO object img = AICSImage(path) stack = img.get_image_data() add_napari(stack, md, blending='additive', gamma=0.85, rename_sliders=True)
class Open_files(QWidget): def __init__(self): super(QWidget, self).__init__() self.layout = QHBoxLayout(self) self.file_dialog = QFileDialog() self.file_dialog.setWindowFlags(Qt.Widget) self.file_dialog.setModal(False) self.file_dialog.setOption(QFileDialog.DontUseNativeDialog) # Remove open and cancel button from widget self.buttonBox = self.file_dialog.findChild(QDialogButtonBox, "buttonBox") self.buttonBox.clear() # Only open following file types #self.file_dialog.setNameFilter("Images (*.czi *.nd2 *.tiff *.tif *.jpg *.png)") self.file_dialog.setNameFilter( "Images (*.czi *.ome.tiff *ome.tif *.tiff *.tif *.jpg *.png)") self.layout.addWidget(self.file_dialog) self.file_dialog.currentChanged.connect(self.open_path) def open_path(self, path): if os.path.isfile(path): viewer.layers.select_all() viewer.layers.remove_selected() if path.endswith((".tiff", ".tif", ".czi")): # Uses aicsimageio to open these files # (image.io but the channel in last dimension which doesn't) # work with napari image = imread(path) if path.endswith((".jpg", ".png")): image = io.imread(path) if path.endswith((".ome.tiff", "ome.tif")): # a little slow but dask_image imread doesn't work well javabridge.start_vm(class_path=bioformats.JARS) #image = load_bioformats(path) image = imread(path) viewer.add_image(image, name="image_1")