def setup_form(self): super(FileFormWidget, self).setup_form() self.openButton = QLineEditToolButton(self) self.openButton.setIcon(QtGui.QIcon("assets/file-open.png")) self.openButton.clicked.connect(self._open_file) if "format" in self.info: self.setValidator(FileFormatValidator(self))
class FileFormWidget(TextFormWidget): def setup_form(self): super(FileFormWidget, self).setup_form() self.openButton = QLineEditToolButton(self) self.openButton.setIcon(QtGui.QIcon("assets/file-open.png")) self.openButton.clicked.connect(self._open_file) if "format" in self.info: self.setValidator(FileFormatValidator(self)) def format_value(self, value): if value is None or value == "": return "" if "format" in self.info: # Change the value to a short or formatted value. Always prefer the # short value for display unless there is no short version. short, full = self.settings.format_file(self.info["format"], value) value = short if short is not None else full return value def get_value(self): text = super(FileFormWidget, self).get_value() if text == "": return None # Final format conversion step. We convert back any short formated file # name to the actual file name, if necessary. try: return self.settings.check_format(self.key, self.info, text) except ValueError: return self.info["value"] def _open_file(self): if "format" in self.info: directory, file_format = os.path.split(self.info["format"]) file_type = os.path.splitext(file_format)[1] file_filter = "{} files (*{})".format(file_type[1:].upper(), file_type) else: directory = "" file_filter = "" work_dir = os.getcwd() + "/" color = self.get_background_color() self.set_background_color("") file_name = QtGui.QFileDialog.getOpenFileName(self, "Select file", work_dir + directory, file_filter) if file_name == "": self.set_background_color(color) return file_name = os.path.relpath(str(file_name), work_dir) self.setText(self.format_value(file_name)) def resizeEvent(self, event): self.openButton.resizeEvent(event) self.form.resize_widget(self.key)