# autoqt
[![PyPI](https://badge.fury.io/py/autoqt.svg)](https://badge.fury.io/py/autoqt)
[![Build Status](https://semaphoreci.com/api/v1/chipolux/autoqt/branches/master/shields_badge.svg)](https://semaphoreci.com/chipolux/autoqt)
A simple single file module that makes setting up basic Qt properties a little
bit nicer without restricting you.
This is very useful if you have QObjects with many readonly properties and a
few special setters or state modifying slots.
Example:
```
from PyQt6.QtCore import pyqtSignal, pyqtSlot
from autoqt6 import AutoObject, AutoProp
class SomeObject(AutoObject):
valuesChanged = pyqtSignal()
aNumber = AutoProp(int, 'valuesChanged', '_aNumber')
otherNumber = AutoProp(float, 'valuesChanged', '_otherNumber')
aString = AutoProp(str, 'valuesChanged', '_aString', write=True)
def __init__(self, parent=None):
super().__init__(parent=parent)
self._aNumber = 10
self._otherNumber = 20
self._aString = 'spam'
@pyqtSlot()
def incrementNumber(self):
self._aNumber += 1
self.valuesChanged.emit()
@otherNumber.setter
def otherNumber(self, value):
self._otherNumber = value + 2
self.valuesChanged.emit()
x = SomeObject()
print(x.aNumber) # 10
x.aNumber = 10 # throws AttributeError, readonly property
x.incrementNumber() # valuesChanged is emitted
print(x.aNumber) # 11
print(x.otherNumber) # 20
x.otherNumber = 40 # otherNumber.setter called, valuesChanged is emitted
print(x.otherNumber) # 42
print(x.aString) # 'spam'
x.aString = 'ham' # valuesChanged is emitted, writable property
print(x.aString) # 'ham'
```
Raw data
{
"_id": null,
"home_page": "https://github.com/jrj99/autoqt6/",
"name": "autoqt6",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "PyQt, PyQt6, pyqtProperty, PySide6",
"author": "NaKyle Wright, Jared Jones",
"author_email": "jared.randall.jones@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/62/e2/3229b6734a3a009f2664a05b533bd78d3d506be7de0e1c49b178fb489ab9/autoqt6-0.0.7.tar.gz",
"platform": null,
"description": "# autoqt\n[![PyPI](https://badge.fury.io/py/autoqt.svg)](https://badge.fury.io/py/autoqt)\n[![Build Status](https://semaphoreci.com/api/v1/chipolux/autoqt/branches/master/shields_badge.svg)](https://semaphoreci.com/chipolux/autoqt)\n\nA simple single file module that makes setting up basic Qt properties a little\nbit nicer without restricting you.\n\nThis is very useful if you have QObjects with many readonly properties and a\nfew special setters or state modifying slots.\n\nExample:\n```\nfrom PyQt6.QtCore import pyqtSignal, pyqtSlot\nfrom autoqt6 import AutoObject, AutoProp\n\n\nclass SomeObject(AutoObject):\n valuesChanged = pyqtSignal()\n\n aNumber = AutoProp(int, 'valuesChanged', '_aNumber')\n otherNumber = AutoProp(float, 'valuesChanged', '_otherNumber')\n aString = AutoProp(str, 'valuesChanged', '_aString', write=True)\n\n def __init__(self, parent=None):\n super().__init__(parent=parent)\n self._aNumber = 10\n self._otherNumber = 20\n self._aString = 'spam'\n\n @pyqtSlot()\n def incrementNumber(self):\n self._aNumber += 1\n self.valuesChanged.emit()\n\n @otherNumber.setter\n def otherNumber(self, value):\n self._otherNumber = value + 2\n self.valuesChanged.emit()\n\n\nx = SomeObject()\n\nprint(x.aNumber) # 10\nx.aNumber = 10 # throws AttributeError, readonly property\nx.incrementNumber() # valuesChanged is emitted\nprint(x.aNumber) # 11\n\nprint(x.otherNumber) # 20\nx.otherNumber = 40 # otherNumber.setter called, valuesChanged is emitted\nprint(x.otherNumber) # 42\n\nprint(x.aString) # 'spam'\nx.aString = 'ham' # valuesChanged is emitted, writable property\nprint(x.aString) # 'ham'\n```\n\n\n",
"bugtrack_url": null,
"license": null,
"summary": "Simplify pyqtProperty creation.",
"version": "0.0.7",
"project_urls": {
"Homepage": "https://github.com/jrj99/autoqt6/"
},
"split_keywords": [
"pyqt",
" pyqt6",
" pyqtproperty",
" pyside6"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "b2d10ac3b9525e7db13e775a46d6c23271e1f7a30b389cb2b10e7dd52c7c64ab",
"md5": "c970bae86965a1bb8c44acd3b18ce4b1",
"sha256": "deb09e890c4133531fbe9e7d779f11a1da82119a729875d1ff5a104072cd74f8"
},
"downloads": -1,
"filename": "autoqt6-0.0.7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c970bae86965a1bb8c44acd3b18ce4b1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 2750,
"upload_time": "2025-01-23T19:39:51",
"upload_time_iso_8601": "2025-01-23T19:39:51.658414Z",
"url": "https://files.pythonhosted.org/packages/b2/d1/0ac3b9525e7db13e775a46d6c23271e1f7a30b389cb2b10e7dd52c7c64ab/autoqt6-0.0.7-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "62e23229b6734a3a009f2664a05b533bd78d3d506be7de0e1c49b178fb489ab9",
"md5": "a6507f5d07087e2a990ef4e535f66a14",
"sha256": "0e29214ae90e760143ff914b480abe045a0f05a383b85558e4b470f24a961b0c"
},
"downloads": -1,
"filename": "autoqt6-0.0.7.tar.gz",
"has_sig": false,
"md5_digest": "a6507f5d07087e2a990ef4e535f66a14",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 2593,
"upload_time": "2025-01-23T19:39:52",
"upload_time_iso_8601": "2025-01-23T19:39:52.740093Z",
"url": "https://files.pythonhosted.org/packages/62/e2/3229b6734a3a009f2664a05b533bd78d3d506be7de0e1c49b178fb489ab9/autoqt6-0.0.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-23 19:39:52",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "jrj99",
"github_project": "autoqt6",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "PySide6",
"specs": [
[
">=",
"6.2.0"
]
]
},
{
"name": "PyQt6",
"specs": [
[
"==",
"6.0.2"
]
]
},
{
"name": "setuptools",
"specs": []
},
{
"name": "wheel",
"specs": []
},
{
"name": "twine",
"specs": []
}
],
"lcname": "autoqt6"
}