示例#1
0
class MarkdownDocument(QObject):
    def __init__(self):
        QObject.__init__(self)
        self.textVal = str()

    def readText(self):
        return self.textVal

    def setText(self, val):
        self.textVal = val
        self.textChanged.emit(val)

    textChanged = Signal(str)
    text = Property(str, readText, setText, notify=textChanged)
示例#2
0
class GameManager(QObject):
    @abc.abstractmethod
    def get_instances(self) -> List[GameInstance]:
        """Return a list of active game instance. The instances returned should be stable (same instance for all invocation)"""
        ...

    instance_added = Signal()
    instance_removed = Signal()
    instance_changed = Signal()
    instances = Property(list, get_instances, notify=instance_changed)

    def stop(self):
        """Stop the GameManager and any GameInstances"""
        pass
示例#3
0
class MyObjectWithNotifyProperty(QObject):
    def __init__(self, parent=None):
        QObject.__init__(self, parent)
        self.p = 0

    def readP(self):
        return self.p

    def writeP(self, v):
        self.p = v
        self.notifyP.emit()

    notifyP = Signal()
    myProperty = Property(int, readP, fset=writeP, notify=notifyP)
示例#4
0
    class PolyEncoder(QObject):
        # name, min, max, value
        def __init__(self, starteffect="", startparameter=""):
            QObject.__init__(self)
            self.effectval = starteffect
            self.parameterval = startparameter
            self.speed = 1
            self.value = 1

        def readEffect(self):
            return self.effectval

        def setEffect(self, val):
            self.effectval = val
            self.effect_changed.emit()

        @Signal
        def effect_changed(self):
            pass

        effect = Property(str, readEffect, setEffect, notify=effect_changed)

        def readParameter(self):
            return self.parameterval

        def setParameter(self, val):
            self.parameterval = val
            self.parameter_changed.emit()

        @Signal
        def parameter_changed(self):
            pass

        parameter = Property(str,
                             readParameter,
                             setParameter,
                             notify=parameter_changed)
示例#5
0
class PieChart (QQuickPaintedItem):
    def __init__(self, parent = None):
        QQuickPaintedItem.__init__(self, parent)
        self._name = u''
        self._color = QColor()

    def paint(self, painter):
        pen = QPen(self._color, 2)
        painter.setPen(pen);
        painter.setRenderHints(QPainter.Antialiasing, True);
        painter.drawPie(self.boundingRect(), 90 * 16, 290 * 16);

    def getColor(self):
        return self._color

    def setColor(self, value):
        if value != self._color:
            self._color = value
            self.update()
            self.colorChanged.emit()

    def getName(self):
        return self._name

    def setName(self, value):
        self._name = value

    colorChanged = Signal()
    color = Property(QColor, getColor, setColor, notify=colorChanged)
    name = Property(text_type, getName, setName)
    chartCleared = Signal()

    @Slot() # This should be something like @Invokable
    def clearChart(self):
        self.setColor(Qt.transparent)
        self.update()
        self.chartCleared.emit()
示例#6
0
class PieSlice(QQuickPaintedItem):
    def __init__(self, parent=None):
        QQuickPaintedItem.__init__(self, parent)
        self._color = QColor()
        self._fromAngle = 0
        self._angleSpan = 0

    def getColor(self):
        return self._color

    def setColor(self, value):
        self._color = value

    def getFromAngle(self):
        return self._angle

    def setFromAngle(self, value):
        self._fromAngle = value

    def getAngleSpan(self):
        return self._angleSpan

    def setAngleSpan(self, value):
        self._angleSpan = value

    color = Property(QColor, getColor, setColor)
    fromAngle = Property(int, getFromAngle, setFromAngle)
    angleSpan = Property(int, getAngleSpan, setAngleSpan)

    def paint(self, painter):
        global paintCalled
        pen = QPen(self._color, 2)
        painter.setPen(pen)
        painter.setRenderHints(QPainter.Antialiasing, True)
        painter.drawPie(self.boundingRect(), self._fromAngle * 16,
                        self._angleSpan * 16)
        paintCalled = True
示例#7
0
class BenchmarkWrapper(QObject):
    def __init__(self, benchmark):
        super().__init__()
        self._benchmark = benchmark

    def _name(self):
        return self._benchmark['name']
    name_changed = Signal()
    name = Property("QString", _name, notify=name_changed)

    def _path(self):
        return basename(self._benchmark['path'])
    path_changed = Signal()
    path = Property("QString", _path, notify=path_changed)

    def _isPlaced(self):
        return self._benchmark['isPlaced']
    isPlaced_changed = Signal()
    isPlaced = Property("bool", _isPlaced, notify=isPlaced_changed)

    def _isOther(self):
        return self._benchmark.get('isOther', False)
    isOther_changed = Signal()
    isOther = Property("bool", _isOther, notify=isOther_changed)
示例#8
0
class CsvColumn(QObject):
    """Store content of a CSV column."""
    def __init__(self, title="", parent=None):
        """Initialize the object with optional column title parameter."""
        super(CsvColumn, self).__init__(parent=parent)
        self._title = title
        self._content = []

    def appendValue(self, value):
        self._content.append(value)

    @Slot(result=str)
    def getFirst(self):
        if not self._content:
            return ""
        return self._content[0]

    @Slot(result=str)
    def getLast(self):
        if not self._content:
            return ""
        return self._content[-1]

    @Slot(QtCharts.QXYSeries)
    def fillChartSerie(self, serie):
        """Fill XYSerie used for displaying QML Chart."""
        if not serie:
            return
        serie.clear()
        for index, value in enumerate(self._content):
            serie.append(float(index), float(value))

    title = Property(str, lambda self: self._title, constant=True)
    content = Property("QStringList",
                       lambda self: self._content,
                       constant=True)
示例#9
0
文件: Box.py 项目: goph-R/NodeEditor
class Box(Component):
    def __init__(self):
        super(Box, self).__init__()
        self._type = ComponentType.Box
        self._width = 1
        self._height = 1
        self._depth = 1

    def width(self):
        return self._width

    def setWidth(self, value):
        self._width = value

    def height(self):
        return self._height

    def setHeight(self, value):
        self._height = value

    def depth(self):
        return self._depth

    def setDepth(self, value):
        self._depth = value

    widthProperty = Property(float, width, setHeight)
    heightProperty = Property(float, height, setHeight)
    depthProperty = Property(float, depth, setDepth)

    def createPropertyMap(self):
        return [
            ComponentProperty('Width', 'width', float),
            ComponentProperty('Height', 'height', float),
            ComponentProperty('Depth', 'depth', float)
        ]
示例#10
0
class UndoStack(QUndoStack):
    def __init__(self, parent=None):
        super(UndoStack, self).__init__(parent)
        # connect QUndoStack signal to UndoStack's ones
        self.cleanChanged.connect(self._cleanChanged)
        self.canUndoChanged.connect(self._canUndoChanged)
        self.canRedoChanged.connect(self._canRedoChanged)
        self.undoTextChanged.connect(self._undoTextChanged)
        self.redoTextChanged.connect(self._redoTextChanged)

    def tryAndPush(self, command):
        # type: (UndoCommand) -> bool
        try:
            res = command.redoImpl()
        except Exception as e:
            logging.error("Error while trying command '{}': \n{}".format(
                command.text(), traceback.format_exc()))
            res = False
        if res is not False:
            command.setEnabled(False)
            self.push(command)  # takes ownership
            command.setEnabled(True)
        return res

    # Redeclare QUndoStack signal since original ones can not be used for properties notifying
    _cleanChanged = Signal()
    _canUndoChanged = Signal()
    _canRedoChanged = Signal()
    _undoTextChanged = Signal()
    _redoTextChanged = Signal()

    clean = Property(bool, QUndoStack.isClean, notify=_cleanChanged)
    canUndo = Property(bool, QUndoStack.canUndo, notify=_canRedoChanged)
    canRedo = Property(bool, QUndoStack.canRedo, notify=_canUndoChanged)
    undoText = Property(str, QUndoStack.undoText, notify=_undoTextChanged)
    redoText = Property(str, QUndoStack.redoText, notify=_redoTextChanged)
示例#11
0
文件: DipSim.py 项目: ndeybach/DipSim
 def __deepcopy__(self, memo):
     cls = self.__class__
     result = cls.__new__(cls)
     super(Dipole, result).__init__()
     memo[id(self)] = result
     for k, v in self.__dict__.items():
         if (k not in ("quaternion", "quaternionChanged")):
             setattr(result, k, deepcopy(v, memo))
         elif (k == "quaternion"):
             result.quaternionChanged = Signal()
             result.quaternion = Property(QQuaternion,
                                          result.getQuaternion,
                                          result.setQuaternion,
                                          notify=result.quaternionChanged)
     return result
示例#12
0
class Connector(QObject):
    def __init__(self):
        super(Connector, self).__init__()
        self._text = "default"
        self.setObjectName("ConnectorObject")

    def setText(self, value):
        print("setText : " + value)
        self._text = value
        self.textChanged.emit()

    def getText(self):
        return self._text

    textChanged = Signal()
    text = Property(str, getText, setText, notify=textChanged)
示例#13
0
class Num(QObject):
    def __init__(self):
        super(Num, self).__init__()
        self._number = "10"
        self.setObjectName("NumObject")

    def setNumber(self, number):
        print("setNumber : " + number)
        self._number = number
        self.numberChanged.emit()

    def getNumber(self):
        return self._number

    numberChanged = Signal()
    number = Property(str, getNumber, setNumber, notify=numberChanged)
示例#14
0
class SingleParam(ParamBase):
    """A direct mapping to a single parameter within a
    :class:`~jvconnected.device.ParameterGroup`
    """
    _param_group_attr = None
    _n_value = Signal()
    def __init__(self, *args):
        assert self._param_group_attr is not None
        self._prop_attr_map = {self._param_group_attr:'value'}
        self._value = None
        super().__init__(*args)

    def _g_value(self) -> str: return str(self._value)
    def _s_value(self, value: str): self._generic_setter('_value', value)
    value: str = Property(str, _g_value, _s_value, notify=_n_value)
    """The parameter value"""
示例#15
0
class MyClass(QObject):
    def __init__(self):
        super(MyClass, self).__init__()
        self.__url = QUrl()

    def getUrl(self):
        return self.__url

    def setUrl(self, value):
        newUrl = QUrl(value)
        if (newUrl != self.__url):
            self.__url = newUrl
            self.urlChanged.emit()

    urlChanged = Signal()
    urla = Property(QUrl, getUrl, setUrl, notify=urlChanged)
class DeviceInfoList(GenericQObject):
    _n_devices = Signal()
    update_devices = Signal()

    def __init__(self, *args):
        self._devices = {}
        self._devices_by_index = {}
        self._devices_by_serial = {}
        super().__init__(*args)
        self.update_devices.connect(self._on_update_devices)

    def _g_devices(self):
        d = self._devices
        return [d[key] for key in sorted(d.keys())]

    def _s_devices(self, value):
        changed = False
        for i, val in enumerate(value):
            if self._devices.get(i) != val:
                changed = True
                self._devices[i] = val
        if changed:
            self._n_devices.emit()

    devices = Property('QVariantList',
                       _g_devices,
                       _s_devices,
                       notify=_n_devices)

    def _on_update_devices(self):
        device_serials = RtlSdr.get_device_serial_addresses()
        logger.debug(f'found sdr serial numbers: {device_serials}')
        for i, device_serial in enumerate(device_serials):
            if i in self._devices:
                continue
            device = self.add_device(i, device_serial)

    def add_device(self, device_index, device_serial):
        assert device_index not in self._devices
        device = DeviceInfo()
        device.device_index = device_index
        device.device_serial = device_serial
        self._devices_by_index[device_index] = device
        device.get_info_from_device_index(device_index)
        self._devices[device_index] = device
        self._n_devices.emit()
        return device
示例#17
0
class StringField(Field):
    def __init__(self, property):
        super(StringField, self).__init__(property)
        self._widget = QLineEdit()
        self._widget.textChanged.connect(self.emitChanged)

    def value(self):
        return self._widget.text()

    def setValue(self, value):
        self._widget.setText(value)

    def setReadOnly(self, value):
        self._widget.setReadOnly(value)

    valueProperty = Property(
        str, value, Field.setValueBlocked)  # C++: should be in parent class
示例#18
0
class KrajeListModel(QAbstractListModel):
    def __init__(self, filename=None):
        QAbstractListModel.__init__(self)
        self.kraje_list = []
        self.ktery_kraj = None
        if filename:
            self.load_from_json(filename)

    # nacteni jsonu kraju
    def load_from_json(self, filename):
        with open(filename, encoding="utf-8") as f:
            self.kraje_list = json.load(f)

    # zjisteni poctu kraju
    def rowCount(self, parent: QtCore.QModelIndex = ...) -> int:
        return len(self.kraje_list['polozky'])

    # nacteni nazvu kraju
    def data(self, index: QtCore.QModelIndex, role: int = ...) -> typing.Any:
        if not index.isValid():
            return None
        if role == QtCore.Qt.DisplayRole:
            return self.kraje_list['polozky'][index.row()]['nazev']

    # poslani id vybraneho kraje do tridy okresu po vybrani kraje uzivatelem
    @Slot()
    def zmena(self):
        print(self.ktery_kraj)
        ajdicko = 0
        for i in range(len(self.kraje_list['polozky']) - 1, -1, -1):
            if self.kraje_list['polozky'][i]['nazev'] == self.ktery_kraj:
                ajdicko = self.kraje_list['polozky'][i]['id']
        okresylist_model.setkraj(ajdicko)

    # tvorba property pro ziskani nazvu kraje z qml
    def get_ktery(self):
        return self.ktery_kraj

    def set_ktery(self, new_val):
        if self.ktery_kraj != new_val:
            self.ktery_kraj = new_val
            self.counter_changed3.emit()

    counter_changed3 = Signal()

    krajus = Property(str, get_ktery, set_ktery, notify=counter_changed3)
示例#19
0
class RssFeedReader(QObject):
    """
    Loads the RSS feed from the network async, every complete
    download is announced as the emit of the signal
    """

    rssFeedLoadedFromSource = Signal()
    rssFeedComplete = Signal()

    def __init__(self, parent=None):
        super().__init__(parent)
        self._rss = []

    @Slot()
    def refreshRssFeed(self):
        """
        Refresh the RSS data from the servers
        """
        logging.info("Worker thread starting")
        self._thread = QThread()
        self.worker = Worker()

        # connect the signals with slots or re-emit the signals
        self._thread.started.connect(self.worker.do_work)
        self._thread.finished.connect(self._thread.deleteLater)
        self.worker.rssSourceLoaded.connect(self.rssFeedLoadedFromSource.emit)
        self.worker.rssDownloadComplete.connect(self.downloadComplete)

        # move the worker to its own thread
        self.worker.moveToThread(self._thread)
        self._thread.start()
        logging.info("Worker thread started via QThread")

    @Slot()
    def downloadComplete(self):
        logging.info("Download complete, stopping thread")

        self._rss = self.worker.get_list()

        self._thread.quit()
        self.rssFeedComplete.emit()

    def get_list(self):
        return self._rss

    rssList = Property('QVariantList', get_list)
示例#20
0
class Number(QObject):
    __val = 0

    @Signal
    def numberChanged(self):
        pass

    @Slot(int)
    def set_number(self, val):
        print("setter func")
        self.__val = val
        self.numberChanged.emit()

    def get_number(self):
        print("getter func")
        return self.__val

    ValueNumber = Property(int, get_number, set_number, notify=numberChanged)
示例#21
0
    class PolyBool(QObject):
        # name, min, max, value
        def __init__(self, startval=False):
            QObject.__init__(self)
            self.valueval = startval

        def readValue(self):
            return self.valueval

        def setValue(self, val):
            self.valueval = val
            self.value_changed.emit()

        @Signal
        def value_changed(self):
            pass

        value = Property(bool, readValue, setValue, notify=value_changed)
示例#22
0
class MyObject(QObject):
    def __init__(self, parent=None):
        QObject.__init__(self, parent)
        self._p = 100

    def setX(self, value):
        self._p = value

    def getX(self):
        return self._p

    def resetX(self):
        self._p = 100

    def delX(self):
        self._p = 0

    x = Property(int, getX, setX, resetX, delX)
示例#23
0
文件: autoqt.py 项目: chipolux/autoqt
 def __init_subclass__(cls, *args, **kwargs):
     super().__init_subclass__(**kwargs)
     # transform AutoProp instances into Qt properties
     for attr in dir(cls):
         try:
             prop = getdeepr(cls, attr)
         except AttributeError:
             continue
         if not isinstance(prop, AutoProp):
             continue
         prop_kwargs = {'notify': getdeepr(cls, prop.signal_name)}
         if prop.fget:
             prop_kwargs['fget'] = prop.fget
         if prop.writable:
             prop_kwargs['fset'] = prop.fset
         setattr(
             cls, attr, Property(prop.type_signature, **prop_kwargs)
         )
示例#24
0
class PieSlice (QQuickPaintedItem):
    def __init__(self, parent = None):
        QQuickPaintedItem.__init__(self, parent)
        self._color = QColor()

    def getColor(self):
        return self._color

    def setColor(self, value):
        self._color = value

    color = Property(QColor, getColor, setColor)

    def paint(self, painter):
        pen = QPen(self._color, 2)
        painter.setPen(pen);
        painter.setRenderHints(QPainter.Antialiasing, True);
        painter.drawPie(self.boundingRect(), 90 * 16, 290 * 16);
示例#25
0
class CurrencyComboBox(QComboBox):
    changed = Signal(int)

    def __init__(self, parent):
        QComboBox.__init__(self, parent)
        self.p_selected_id = 0
        self.model = None
        self.table_name = 'currencies'
        self.field_name = 'name'
        self.activated.connect(self.OnUserSelection)

        self.model = QSqlTableModel(db=db_connection())
        self.model.setTable(self.table_name)
        self.model.select()
        self.setModel(self.model)
        self.setModelColumn(self.model.fieldIndex(self.field_name))

    def isCustom(self):
        return True

    def getId(self):
        return self.p_selected_id

    def setId(self, new_id):
        if self.p_selected_id == new_id:
            return
        self.p_selected_id = new_id
        name = get_field_by_id_from_table(self.table_name, self.field_name,
                                          self.p_selected_id)
        if self.currentIndex() == self.findText(name):
            return
        self.setCurrentIndex(self.findText(name))

    selected_id = Property(int, getId, setId, notify=changed, user=True)

    def setIndex(self, index):
        if index is not None:
            self.selected_id = index
            self.changed.emit(self.selected_id)

    @Slot()
    def OnUserSelection(self, _selected_index):
        self.selected_id = self.model.record(self.currentIndex()).value("id")
        self.changed.emit(self.selected_id)
示例#26
0
class Container(QObject):
    def __init__(self, name, data, parent=None):
        super().__init__(parent)
        self.setObjectName(name)
        self._content = data
        self.destroyed.connect(self._slot_container_is_going_to_be_destroyed)

    @Slot(QObject)
    def _slot_container_is_going_to_be_destroyed(self, obj: QObject):
        logger().info(f'{type(obj)}: {obj.objectName()} (id:{id(obj)}) is going to be destroyed')
        self.terminal_clean_up()

    def terminal_clean_up(self):
        try:
            self._content.terminal_clean_up()
        except AttributeError:
            pass
        self._content = None

    def get_content(self):
        return self._content

    def _get_content_property(self):
        return self.get_content()

    content = Property(str, _get_content_property, constant=True)

    def data(self, column: str, role: int):
        if role in [Qt.DisplayRole, Qt.EditRole]:
            if column == 'name':
                return self.objectName()
        return None

    def set_data(self, column: str, role: int, data):
        return False

    # def editable(self, column: str):
    #     return False

    def flags(self, column: str, flags):
        return flags

    def values_choice(self, column='value'):
        return None, None
示例#27
0
class Squircle(QQuickItem):
    def __init__(self, t=0.0, parent=None):
        super().__init__(parent)
        # self._renderer = None
        self._t = t
        self._renderer = None
        self.windowChanged.connect(self.onWindowChanged)

    @Slot(QQuickWindow)
    def onWindowChanged(self, window):
        self.window().beforeSynchronizing.connect(self.sync,
                                                  type=Qt.DirectConnection)
        self.window().setClearBeforeRendering(False)

    @Slot()
    def sync(self):
        print("sync({})".format(self._t))
        if self._renderer is None:
            self._renderer = SquircleRenderer()
            self.window().beforeRendering.connect(self._renderer.paint,
                                                  type=Qt.DirectConnection)
        self._renderer.set_viewport_size(self.window().size() *
                                         self.window().devicePixelRatio())
        self._renderer.set_t(self._t)
        self._renderer.set_window(self.window())

    def getT(self):
        return self._t

    def setT(self, t):
        if t == self._t:
            return
        self._t = t
        #print("setT({})".format(t))

        if self.window():
            self.window().update()

    @Signal
    def t_changed(self):
        pass

    t = Property(float, getT, setT, notify=t_changed)
示例#28
0
class PieChart(QQuickPaintedItem):
    def __init__(self, parent=None):
        QQuickPaintedItem.__init__(self, parent)
        self._name = u''
        self._slices = []

    def getName(self):
        return self._name

    def setName(self, value):
        self._name = value

    name = Property(text_type, getName, setName)

    def appendSlice(self, _slice):
        _slice.setParentItem(self)
        self._slices.append(_slice)

    slices = ListProperty(PieSlice, appendSlice)
示例#29
0
    class Notif(NotifP):
        def __init__(self, val=None):
            self._val = val
            super().__init__()

        @Signal
        def changed(self):
            pass

        def read(self):
            return self._val

        def write(self, val):
            if self._val != val:
                self._val = val
                self.changed.emit()
                py.update()

        val = Property(type_, read, write, notify=changed)
示例#30
0
class Person(QObject):
    def __init__(self):
        super().__init__()
        self.current_mood = "Happy"

    def getMood(self):
        return self.current_mood

    def setMood(self, mood):
        if mood != self.current_mood and mood != "":
            self.current_mood = mood
            # Call the notifying signal. We are not passing data here so don't need to emit anything in particular.
            self.moodChanged.emit()

    # Notifying signal - to be used in qml as "onMoodChanged"
    moodChanged = Signal()

    # Mood property to be accessed to and from QML and Python.
    mood = Property(str, getMood, setMood, notify=moodChanged)