+++ /dev/null
-#!/usr/bin/env python
-
-from __future__ import with_statement
-from __future__ import division
-
-import sys
-import logging
-
-from PyQt4 import QtCore
-from PyQt4 import QtGui
-
-
-_moduleLogger = logging.getLogger(__name__)
-
-
-class QPieDisplay(QtGui.QWidget):
-
- def __init__(self, parent = None, flags = QtCore.Qt.Window):
- QtGui.QWidget.__init__(self, parent, flags)
- self._child = None
- self._size = QtCore.QSize(128, 128)
- self._canvas = QtGui.QPixmap(self._size)
- self._mask = QtGui.QBitmap(self._canvas.size())
- self._mask.fill(QtCore.Qt.color0)
- self._generate_mask(self._mask)
- self._canvas.setMask(self._mask)
-
- def sizeHint(self):
- return self._size
-
- def showEvent(self, showEvent):
- self.setMask(self._mask)
-
- QtGui.QWidget.showEvent(self, showEvent)
-
- def paintEvent(self, paintEvent):
- painter = QtGui.QPainter(self._canvas)
- painter.setRenderHint(QtGui.QPainter.Antialiasing, True)
- adjustmentRect = self._canvas.rect().adjusted(0, 0, -1, -1)
-
- painter.setBrush(self.palette().window())
- painter.setPen(self.palette().mid().color())
- painter.drawRect(self._canvas.rect())
-
- background = self.palette().highlight().color()
- painter.setPen(QtCore.Qt.NoPen)
- painter.setBrush(background)
- painter.drawPie(adjustmentRect, 0, 360 * 16)
-
- dark = self.palette().mid().color()
- painter.setPen(QtGui.QPen(dark, 1))
- painter.setBrush(QtCore.Qt.NoBrush)
- painter.drawEllipse(adjustmentRect)
-
- screen = QtGui.QPainter(self)
- screen.drawPixmap(QtCore.QPoint(0, 0), self._canvas)
- QtGui.QWidget.paintEvent(self, paintEvent)
-
- def mousePressEvent(self, mouseEvent):
- pass
-
- def mouseReleaseEvent(self, mouseEvent):
- if self._child is None:
- lastMousePos = mouseEvent.pos()
- globalButtonPos = self.mapToGlobal(lastMousePos)
- self._child = QPieDisplay(None, QtCore.Qt.SplashScreen)
- self._child.move(globalButtonPos)
- self._child.show()
- else:
- self._child.hide()
- self._child = None
-
- def _generate_mask(self, mask):
- """
- Specifies on the mask the shape of the pie menu
- """
- painter = QtGui.QPainter(mask)
- painter.setPen(QtCore.Qt.color1)
- painter.setBrush(QtCore.Qt.color1)
- painter.drawRect(mask.rect())
-
-class Grid(object):
-
- def __init__(self):
- layout = QtGui.QGridLayout()
- for i in xrange(3):
- for k in xrange(3):
- button = QtGui.QPushButton("%s,%s" % (i, k))
- button.setSizePolicy(QtGui.QSizePolicy(
- QtGui.QSizePolicy.MinimumExpanding,
- QtGui.QSizePolicy.MinimumExpanding,
- QtGui.QSizePolicy.PushButton,
- ))
- self._create_callback(button)
- layout.addWidget(button, i, k)
-
- centralWidget = QtGui.QWidget()
- centralWidget.setLayout(layout)
- centralWidget.setContentsMargins(0, 0, 0, 0)
-
- self._window = QtGui.QMainWindow()
- self._window.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
- self._window.setWindowTitle("Buttons!")
- self._window.setCentralWidget(centralWidget)
- self._child = None
-
- def show(self):
- self._window.show()
-
- def _create_callback(self, button):
- button.clicked.connect(lambda: self._on_click(button))
-
- def _on_click(self, button):
- if self._child is None:
- buttonCorner = pos = QtCore.QPoint(0, 0)
- globalButtonPos = button.mapToGlobal(pos)
- self._child = QPieDisplay(None, QtCore.Qt.SplashScreen)
- self._child.move(globalButtonPos)
- self._child.show()
- else:
- self._child.hide()
- self._child = None
-
-
-if __name__ == "__main__":
- app = QtGui.QApplication([])
-
- grid = Grid()
- grid.show()
-
- val = app.exec_()
- sys.exit(val)
+++ /dev/null
-#!/usr/bin/env python
-
-from __future__ import with_statement
-from __future__ import division
-
-import sys
-import logging
-
-PYSIDE = False
-DISCONNECT_ON_DELETE = False
-
-if PYSIDE:
- import PySide.QtCore as QtCore
- import PySide.QtGui as QtGui
-else:
- import PyQt4.QtCore as QtCore
- import PyQt4.QtGui as QtGui
-
-
-_moduleLogger = logging.getLogger(__name__)
-
-
-class Signaller(QtCore.QObject):
-
- if PYSIDE:
- s1 = QtCore.Signal()
- s2 = QtCore.Signal()
- else:
- s1 = QtCore.pyqtSignal()
- s2 = QtCore.pyqtSignal()
-
-
-class Window(object):
-
- def __init__(self, s):
- self._window = QtGui.QMainWindow()
- self._window.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
- self._window.setWindowTitle("Demo!")
- if DISCONNECT_ON_DELETE:
- self._window.destroyed.connect(self._on_destroyed)
-
- self._s = s
- self._s.s1.connect(self._on_signal)
- self._s.s2.connect(self._on_signal)
-
- def show(self):
- self._window.show()
-
- def _on_signal(self):
- print "Signal!"
- self._window.setWindowTitle("Signaled!")
-
- def _on_destroyed(self, obj = None):
- print "Main window destroyed"
- self._s.s1.disconnect(self._on_signal)
- self._s.s2.disconnect(self._on_signal)
-
-
-if __name__ == "__main__":
- app = QtGui.QApplication([])
-
- s = Signaller()
- w = Window(s)
- w.show()
-
- val = app.exec_()
- del w
-
- print "s1"
- s.s1.emit()
- print "s2"
- s.s2.emit()
-
- print "Exiting"
- sys.exit(val)
+++ /dev/null
-#!/usr/bin/env python
-
-from __future__ import with_statement
-from __future__ import division
-
-import sys
-import logging
-
-from PyQt4 import QtCore
-from PyQt4 import QtGui
-
-
-_moduleLogger = logging.getLogger(__name__)
-
-
-if __name__ == "__main__":
- app = QtGui.QApplication([])
-
- layout = QtGui.QGridLayout()
- for i in xrange(3):
- for k in xrange(3):
- button = QtGui.QPushButton("%s,%s" % (i, k))
- button.setSizePolicy(QtGui.QSizePolicy(
- QtGui.QSizePolicy.MinimumExpanding,
- QtGui.QSizePolicy.MinimumExpanding,
- QtGui.QSizePolicy.PushButton,
- ))
- layout.addWidget(button, i, k)
-
- centralWidget = QtGui.QWidget()
- centralWidget.setLayout(layout)
- centralWidget.setContentsMargins(0, 0, 0, 0)
-
- window = QtGui.QMainWindow()
- window.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
- window.setWindowTitle("Buttons!")
- window.setCentralWidget(centralWidget)
- window.show()
-
- val = app.exec_()
- sys.exit(val)
+++ /dev/null
-#!/usr/bin/env python
-
-from __future__ import with_statement
-from __future__ import division
-
-import functools
-import time
-
-
-FORCE_PYQT = False
-DECORATE = True
-
-
-try:
- if FORCE_PYQT:
- raise ImportError()
- import PySide.QtCore as _QtCore
- QtCore = _QtCore
- USES_PYSIDE = True
-except ImportError:
- import sip
- sip.setapi('QString', 2)
- sip.setapi('QVariant', 2)
- import PyQt4.QtCore as _QtCore
- QtCore = _QtCore
- USES_PYSIDE = False
-
-
-if USES_PYSIDE:
- Signal = QtCore.Signal
- Slot = QtCore.Slot
- Property = QtCore.Property
-else:
- Signal = QtCore.pyqtSignal
- Slot = QtCore.pyqtSlot
- Property = QtCore.pyqtProperty
-
-
-def log_exception():
-
- def log_exception_decorator(func):
-
- @functools.wraps(func)
- def wrapper(*args, **kwds):
- try:
- return func(*args, **kwds)
- except Exception:
- print "Exception", func.__name__
- raise
-
- if DECORATE:
- return wrapper
- else:
- return func
-
- return log_exception_decorator
-
-
-class QThread44(QtCore.QThread):
- """
- This is to imitate QThread in Qt 4.4+ for when running on older version
- See http://labs.trolltech.com/blogs/2010/06/17/youre-doing-it-wrong
- (On Lucid I have Qt 4.7 and this is still an issue)
- """
-
- def __init__(self, parent = None):
- QtCore.QThread.__init__(self, parent)
-
- def run(self):
- self.exec_()
-
-
-class Producer(QtCore.QObject):
-
- data = Signal(int)
- done = Signal()
-
- def __init__(self):
- QtCore.QObject.__init__(self)
-
- @Slot()
- @log_exception()
- def process(self):
- print "Starting producer"
- for i in xrange(10):
- self.data.emit(i)
- time.sleep(0.1)
- self.done.emit()
-
-
-class Consumer(QtCore.QObject):
-
- def __init__(self):
- QtCore.QObject.__init__(self)
-
- @Slot()
- @log_exception()
- def process(self):
- print "Starting consumer"
-
- @Slot()
- @log_exception()
- def print_done(self):
- print "Done"
-
- @Slot(int)
- @log_exception()
- def print_data(self, i):
- print i
-
-
-def run_producer_consumer():
- app = QtCore.QCoreApplication([])
-
- producerThread = QThread44()
- producer = Producer()
- producer.moveToThread(producerThread)
- producerThread.started.connect(producer.process)
-
- consumerThread = QThread44()
- consumer = Consumer()
- consumer.moveToThread(consumerThread)
- consumerThread.started.connect(consumer.process)
-
- producer.data.connect(consumer.print_data)
- producer.done.connect(consumer.print_done)
-
- @Slot()
- @log_exception()
- def producer_done():
- print "Shutting down"
- producerThread.quit()
- consumerThread.quit()
- print "Done"
- producer.done.connect(producer_done)
-
- count = [0]
-
- @Slot()
- @log_exception()
- def thread_done():
- print "Thread done"
- count[0] += 1
- if count[0] == 2:
- print "Quitting"
- app.exit(0)
- print "Done"
- producerThread.finished.connect(thread_done)
- consumerThread.finished.connect(thread_done)
-
- producerThread.start()
- consumerThread.start()
- print "Status %s" % app.exec_()
-
-
-if __name__ == "__main__":
- run_producer_consumer()
+++ /dev/null
-#!/usr/bin/env python
-
-from __future__ import with_statement
-from __future__ import division
-
-import QtMobility.Contacts as QtContacts
-
-
-class QtContactsAddressBook(object):
-
- def __init__(self, name, uri):
- self._name = name
- self._uri = uri
- self._manager = QtContacts.QContactManager.fromUri(uri)
- self._contacts = None
-
- @property
- def name(self):
- return self._name
-
- @property
- def error(self):
- return self._manager.error()
-
- def update_account(self, force = True):
- if not force and self._contacts is not None:
- return
- self._contacts = dict(self._get_contacts())
-
- def get_contacts(self):
- if self._contacts is None:
- self._contacts = dict(self._get_contacts())
- return self._contacts
-
- def _get_contacts(self):
- contacts = self._manager.contacts()
- for contact in contacts:
- contactId = contact.localId()
- contactName = contact.displayLabel()
- phoneDetails = contact.details(QtContacts.QContactPhoneNumber().DefinitionName)
- phones = [{"phoneType": "Phone", "phoneNumber": phone.value(QtContacts.QContactPhoneNumber().FieldNumber)} for phone in phoneDetails]
- contactDetails = phones
- if 0 < len(contactDetails):
- yield str(contactId), {
- "contactId": str(contactId),
- "name": contactName,
- "numbers": contactDetails,
- }
-
-
-class _QtContactsAddressBookFactory(object):
-
- def __init__(self):
- self._availableManagers = {}
-
- availableMgrs = QtContacts.QContactManager.availableManagers()
- availableMgrs.remove("invalid")
- for managerName in availableMgrs:
- params = {}
- managerUri = QtContacts.QContactManager.buildUri(managerName, params)
- self._availableManagers[managerName] = managerUri
-
- def get_addressbooks(self):
- for name, uri in self._availableManagers.iteritems():
- book = QtContactsAddressBook(name, uri)
- if book.error:
- print "Could not load %r due to %r" % (name, book.error)
- else:
- yield book
-
-
-class _EmptyAddressBookFactory(object):
-
- def get_addressbooks(self):
- if False:
- yield None
-
-
-if QtContacts is not None:
- QtContactsAddressBookFactory = _QtContactsAddressBookFactory
-else:
- QtContactsAddressBookFactory = _EmptyAddressBookFactory
- print "QtContacts support not available"
-
-
-if __name__ == "__main__":
- factory = QtContactsAddressBookFactory()
- books = factory.get_addressbooks()
- for book in books:
- print book.name
- print book.get_contacts()