def save_challenge(self, filename=None):
     # Saves the challenge data to a json file.
     if not filename:
         filename = QFileDialog().getSaveFileName(
             self, 'Save challenge', self.exportPath,
             'Anime Challenge List Object(*.aclo)')[0]
         if not filename:
             return False
         self.exportPath = filename.rstrip(filename.split('/')[-1])
     entries = {}
     for k in range(0, self.challengeEntries.count()):
         name = self.challengeEntries.item(k).text()
         data = self.challengeEntries.item(k).data(Qt.UserRole)
         challengeData = {}
         for attr in data.savedAttributesList:
             challengeData[attr] = getattr(data, attr, None)
         entries[name] = challengeData
     savedata = {
         'name': self.challengeName.text(),
         'username': self.username.text(),
         'entryNumbers': self.entryNumbers,
         'exportPath': self.exportPath,
         'startDate': self.startDate.text(),
         'entries': entries
     }
     with open(filename, 'w') as f:
         json.dump(savedata, f, indent=4)
     return True
 def export_image(self):
     # Asks for a save location and name and saves the current entry image.
     data = self.challengeEntries.currentItem().data(Qt.UserRole)
     filename = QFileDialog().getSaveFileName(self, 'Save image',
                                              self.exportPath,
                                              'PNG(*.png)')[0]
     if not filename:
         return
     self.exportPath = filename.rstrip(filename.split('/')[-1])
     image = data.image.build_full_image()
     image.save(filename, 'png')