#!/usr/bin/env python
import sys
from PyQt4 import Qt, QtCore, QtGui
from ui_mainwin import Ui_MainWindow
import flickr, os
working_path = os.path.expanduser('~/.pyqflickr')
photo_size = '' # medium
# Keyboard sensitive QLineEdit
class LineEditWithShortcuts(QtGui.QLineEdit):
def event(self, event):
if event.type() == QtCore.QEvent.KeyPress:
if event.modifiers() & QtCore.Qt.ControlModifier:
self.emit(QtCore.SIGNAL("shortcutPressed"), event.key())
return True
return QtGui.QLineEdit.event(self, event)
# Main window
class PyQFlickr(QtGui.QMainWindow):
def shortcutPressed(self, key):
if self.photos == None: return
if key == QtCore.Qt.Key_Right:
self.photo = (self.photo + 1) % len(self.photos)
self.show_photo()
elif key == QtCore.Qt.Key_Left:
self.photo = (self.photo - 1) % len(self.photos)
self.show_photo()
elif key == QtCore.Qt.Key_Up:
self.photos = None
self.photo = None
self.show_sets()
elif key == QtCore.Qt.Key_R:
self.photos[self.photo].rotate()
self.show_photo(force = True)
def show_photo(self, force = False):
photo = self.photos[self.photo]
tags = photo.tags()
tags_txt = '<b>Tags</b>:<br>'
for t in tags:
tags_txt = tags_txt + t + '<br>'
txt = '''<center>
<table>
<tr>
<td margin="5" align="center">
<img src="%s">
</td>
<td bgcolor="#CCCCCC">%s</td>
</tr>
</table>
</center>''' % \
(photo.get(working_path, photo_size, force), tags_txt)
self.ui.interfaceBrowser.setHtml(txt)
def anchorClicked(self, url):
if self.photos == None: # In set mode
self.photos = flickr.photos(url.toString()) # url must be the setid
self.photo = 0
self.show_photo()
def message(self, msg):
QtGui.QMessageBox.warning(None, "Warning", msg)
def show_sets(self):
txt = '<table><tr>'
i = 1
for s in self.sets:
txt = txt + '<td width="120" align="center"><a href="%s"><img src="%s"><br>%s</a></td>' % \
(s.id(), s.get_photo(working_path), s.name())
if i % 8 == 0: txt = txt + '</tr><tr>'
i += 1
txt = txt + '</tr></table>'
self.ui.interfaceBrowser.setHtml(txt)
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
# Setup ui
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.tagEdit = LineEditWithShortcuts(self.ui.centralwidget)
self.ui.tagEdit.setObjectName("tagEdit")
self.ui.vboxlayout.addWidget(self.ui.tagEdit)
self.ui.interfaceBrowser.setOpenLinks(False)
# Connect signals
self.connect(self.ui.tagEdit, QtCore.SIGNAL("shortcutPressed"), self.shortcutPressed)
self.connect(self.ui.interfaceBrowser, QtCore.SIGNAL("anchorClicked(const QUrl&)"), self.anchorClicked)
# Init member
self.sets = None
self.photos = None
self.photo = None
# Deal with Flickr
flickr.authenticate(self.message)
self.sets = flickr.photosets()
self.show_sets()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
win = PyQFlickr()
win.show()
sys.exit(app.exec_())