Qtica


NameQtica JSON
Version 0.4.3 PyPI version JSON
download
home_pagehttps://github.com/qtica-project/Qtica
SummaryQtica is a Python library that offers a lightweight API built around native PySide6. It enables swift GUI prototyping utilizing contemporary declarative UI methods, all within Python.
upload_time2024-03-05 02:00:18
maintainer
docs_urlNone
authorOsama Mohammed Al-zabidi
requires_python>=3.10,<3.13
licenseGPL-3.0
keywords qt pyside6 python declarative qml qtica fast easy toolkit tools
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <p align="center">
  <a href="https://qticaproject.gitbook.io/qtica/">
    <img alt="Qtica" src="https://github.com/qtica-project/Qtica/blob/main/logo.png">
  </a>
</p>

<p align="center">
  A Fast Way to Done Your Idea!
</p>

<h2 align="center">
  v0.4.3
</h2>

# Qtica

Qtica is a Python library that offers a lightweight API built around native PySide6. It enables swift GUI prototyping utilizing contemporary declarative UI methods, all within Python.

Qtica is currently in active development and not yet ready for stable release.

## Features

- **Lightweight API:** Built around PySide6, Qtica offers a streamlined interface for GUI development.
- **Declarative UI Techniques:** Facilitates the use of modern UI techniques directly within Python.
- **Swift Prototyping:** Enables rapid GUI prototyping for efficient development.


## Installation

You can install **Qtica** via pip:

```bash
pip install qtica
```


## Usage

```python
import os
import sys
from PySide6.QtGui import QColor
from PySide6.QtCore import QSize, Qt
from Qtica.services import randomColor, colorToHex
from Qtica.widgets import MainWindow, Label, Application
from Qtica import BehaviorDec, Api


class Window(BehaviorDec):
    def get_text_color(self, color: QColor) -> QColor:
        luma = ((0.299 * color.red()) + (0.587 * color.green()) + (0.114 * color.blue())) / 255
        return QColor(0, 0, 0) if luma > 0.5 else QColor(255, 255, 255)

    def update_background(self):
        bg_color = randomColor()
        fg_color = self.get_text_color(bg_color)

        Api.fetch("window").qss.update({"background-color": bg_color.name()})
        Api.fetch("label").qss.update({"color": fg_color.name()})

    def __init__(self):
        return MainWindow(
            uid="window",
            windowTitle="Welcome Qtica!",
            methods = [
                ("resize", QSize(400, 200))
            ],
            events = [
                ("mousePress", lambda _: self.update_background())
            ],
            home=Label(
                uid="label",
                setText=f"Hello {os.environ.get('USER', '')}, Welcome to Qtica.<br>Click me!",
                setTextFormat=Qt.TextFormat.RichText,
                setAlignment=Qt.AlignmentFlag.AlignCenter,
                qss={"font-size": "24px"}
            ),
            qss={"background-color": colorToHex(randomColor())},
        )

app = Application(sys.argv)
window = Window()
window.show()
sys.exit(app.exec())
```


## Documentation

For more information and detailed usage examples, refer to the [documentation](https://omamkaz.gitbook.io/qtica/).


## License

This project is licensed under the [GPL3 License](https://github.com/qtica-project/Qtica/blob/main/LICENSE).


## NOTE

Welcome to Qtica!

Thank you for choosing Qtica! Please be aware that this library is continuously evolving and is not yet considered stable as it's actively under development. We encourage you to use it for experimentation and kindly ask for your feedback, bug reports, suggestions, or improvements that align with your preferences. Your input is invaluable! 😊

Thank you for being a part of Qtica's development journey!
# Changelog

## 0.1.1 - (2023-11-05)

### Added

- #### PySide6 Built-in Widgets

  - QApplication
  - QPushButton
  - QLabel
  - QFrame
  - QMainWindow
  - QSystemTrayIcon
  - QGraphicsView
  - QWidget
  - QQuickWidget
  - QQuickView
  - QGraphicsOpacityEffect
  - QGraphicsDropShadowEffect
  - QGraphicsColorizeEffect
  - QGraphicsBlurEffect
  - QFormLayout
  - QGridLayout
  - QHBoxLayout
  - QStackedLayout
  - QVBoxLayout

- #### PySide6 Additional Widgets

  - WigglyWidget
  - WaterRippleProgressBar
  - WaterProgressBar
  - ProgressIndicator
  - MovieView
  - MetroCircleProgress
  - ElidingLabel
  - FramelessWindow
  - RoutingWindow
  - TeachingTip
  - SlidingStackedWidget
  - SideBarWidget
  - TerminalWidget
  - NavBarWidget
  - SilentTextDialog
  - LargTextDialog
  - ColourfulProgressBar
  - OutsideNeumorphismEffect
  - InsideNeumorphismEffect
  - FlowLayout
  - ExpandLayout

- #### PySide6 Built-in Core

  - QPropertyAnimation

- #### PySide6 Additional Core
  - StyleAnimation
  - ProgressStyleAnimation
  - Animation

## 0.1.2 - (2023-11-07)

### Added

- Qtica `logo.png`
- version_generator.py example
- status_edge.py example
- resources, and fonts into the `Application` class.
- `tools.Painter class`
- `tools.PaintStatusEdge`
- `widgets.FramelessWindowSizeGrip`

### Changed

- `enums.Sizes.size_hint` -> `enums.Sizes.hint`

### Fixed

- `core.BehaviorDeclarative`, no uid in `__init__` parameters

## 0.1.3 - (2023-11-12)

### Added

- `widgets.ThemeSwitchButton`
- `enums.AbstractIcons` to make enum icons that work with Qtica tools
- `tools.Icon`
- `utils.color.DetectImageColors`, using to get an image colors map.
- `utils.color.get_image_average_color`, get an image rgb color
- `widgets.LineEdit`
- `core.WidgetBase` effect argument.
- `core.AbstractBase` \*\*kwargs, can now accept set value for method.
- `widgets.ScrollArea`
- get_start.py example

### Changed

- `Theme.system_theme` to static method type.
- `effects.*` from ObjectDeclarative class type to `ObjectBase`
- `utils.color.get_hex_from_color` color arg to \*rgb arg

### Fixed

- pixmap error when you try to add `QIcon` to `tools.Icon` with color value.

## 0.1.4 (2023-11-24)

### Added

- extras `icons` modules `elusive` `feather` `fluent` `fontawesome` `material`
- `widgets.FramelessWindowSizeGrip` edge option.
- `utils.methods.qt_corner_to_edge` convert Qt.Corner inputs to Qt.Edge values.
- `widgets.StackedWidget` QStackedWidget built-in PySide6 class
- `widgets.IconWidget`
- `widgets.MaskDialog`

### Fixed

- `widgets.FramelessWindow` window geometry changed when move window.
- `widgets.FramelessWindowSizeGrip` cursor shape for SizeGrip hover.
- `tools.Icon` list index out of range, when used colored icon

### Updated

- `widgets.NavBarButton` it's now subclass from `core.WidgetBase`

## 0.2.0 (2023-12-08)

### Added

- `widgets.HLine`, Horizontal Frame widget.
- `widgets.VLine`, Vertical Frame widget.
- `widgets.ToolButton` PySide6 Built-in QToolButton
- `core.QStyleSheet` restore_qss method to restore last Qss value after update_qss call with save=False.
- `tools.StatusEdgePaint` corner option.
- `widgets.MainWindow`, `widgets.FramelessWindow`, `widgets.RoutingWindow` sys_tray parameter.
- `widgets.Menu`, fork for PySide6.QtWidgets.QMenu.
- `tools.Action` fork for PySide6.QtGui.QAction.
- `utils.colors`
- `core.AbstractBase` `methods` parameter.
- `core.AbstractTool`, `core.ToolBase`
- `core.AbstractIcon`, `core.IconBase`
- `core.AbstractPainter`, `core.PainterBase`

### Removed

- `tools.Painter` `__init__` return parent widget, you can now return from subclasses.
- `core.Return`, we dont't need it any more!

### Updated

- `layouts.HLayout`, and `layouts.VLayout` now you can add `QSpacerItem`, and `QLayoutItem` widget types to children
- `core.QStyleSheet` improve Qss Parser.
- `core.QStyleSheet` qss now accepting json files.
- `widgets.LineEdit` password_mode parameter, add password echo mode support
- `widgets.SlidingStackedWidget` now children parameter support Route

### Fixed

- `tools.Icon` default color value -1, when color is None
- `core.Api.fetch` method NoneType error when fetching `PySide6.QtWidgets.QApplication` class type.

### Changed

- `tools.PaintStatusEdge` to `tools.StatusEdgePaint`
- `tools.ObjectBase` to `tools.QObjectBase`
- `widgets.QuickWidget` parameter `file` to `qml`
- `widgets.QuickView` parameter `file` to `qml`

## 0.2.1 (2023-12-09)

### Added

- `utils.caseconverter`, forking `caseconverter` module to be as built-in

### Changed

- moving pynput from dependencies to extras dependence.

### Removed

- `requirements.txt`, we don't need it anymore, you can use poetry to install requirements.

## 0.3.0 (2024-01-03)

### Changed

- `core.Api.fetch` \type argument has been renamed to qtype
- `widgets.MovieView` has been moved and renamed to `tools.Movie`
- `tools.EnvVar` has been moved to `utils.EnvVar`
- `widgets.Application` list_styles has been renamed to style_list
- `core.WidgetBase` has been renamed to `AbstractWidget`
- `core.ObjectBase` has been renamed to `AbstractQObject`
- `core.BehavioDeclarative` has been renamed to `BehavioDec`
- `core.QStyleSheet` has been moved to `utils.QStyleSheet`
- `core.WidgetDeclarative` has been renamed to `WidgetDec`
- `core.ObjectDeclarative` has been renamed to `QObjectDec`
- `core.TrackingDeclarative` has been renamed to TrackingDec`
- `utils.colors.get_image_average_color` has been renamed to `imageAverageColor`
- `utils.colors.imageAverageColor` return `QColor` type insted `list[int]`
- `utils.colors.get_color_from_hex` has been renamed to `hexToColor`
- `utils.colors.get_hex_from_color` has been renamed to `colorToHex`
- `utils.colors.get_random_color` has been renamed to `randomColor`
- `enums.TeachingTipTailPositions` has been renamed to `TeachingTipTailPos`
- `widgets.ScrollArea` child can know accepted `QLayout` Objects
- `core.AbstractBase.get` has been renamed to `fetch`
- `utils.colors.Contrast.color_type` has been renamed to `color_mode`
- `core.AbstractPainter._repaint` has been renamed to `repaint`
- `core.AbstractPainter._paint` has been renamed to `_paint` 
- `core.AbstractPainter._super_paintEvent` has been renamed to `super_paintEvent` 

### Updated

- `core.AbstractBase` events keyword, now can accept methods without 'Event' suffix
- `enums.EnvVars`, some variables added
- `core.AbstractWidget` - `core.AbstractWidget` Now you can add an event method without writing the 'Event' suffix, and the class will auto-detect the method.
- `utils.Routes` add support for QStackedLayout

### Fixed

- `core.Api.fetch` Improve QObject Finder
- `utils.colors.ImageColors.most_common` change from property to method
- `core.AbstractDec` saving uid for objects how was have `objectName` method.

### Added

- supporting for PySide6.{5,6}.x versions
- `widgets.IconWidget` support `QMovie` animation image.
- `core.AbstractWidget` long_press Signal
- `core.AbstractBase.enable_event_stack`, know you can stack a widget event.
- `sys_tray.py` to examples folder.
- `stack.py` to examples folder.
- `core.AbstractIcons`
- `core.AbstractTool`
- `core.AbstractPainter`
- `core.AbstractDec`
- `utils.theme_detect` forked to be Qtica built-in module
- `layouts.ColumnLayout`
- `layouts.ColumnLayoutItemWrapper`
- `layouts.RowLayout`
- `layouts.RowLayoutItemWrapper`
- `layouts.BorderLayout`
- `layouts.BorderLayoutItemWrapper`
- `core.Api.dec_fetch`
- `enums.Theme`
- `services.showDialog`
- `services.TakeScreenShot`
- `services.UrlOpen`
- `tools.SystemTray`
- `tools.Action`
- `widgets.Stack`
- `tools.Pen`
- `painters.CircularProgressPaint`
- `core.AbstractDialog`
- `widgets.dialogs.TeachingTipDialog`
- `tools.action.LinePasswordAction`


## 0.3.1 (2024-01-09)

### Added

- `animations.ParallelAnimationGroup`
- `animations.SequentialAnimationGroup`
- `tools.Brush`

### Changed

- `Qtica.animation` has been renamed to `Qtica.animations`
- `tools.painters` has been moved to the main directory of Qtica `Qtica.painters`
- `layouts.GridLayoutItemWrapper` has been moved to `tools.wrappers.GridLayoutWrapper`
- `layouts.VLayoutItemWrapper` has been moved to `tools.wrappers.VLayoutWrapper`
- `layouts.HLayoutItemWrapper` has been moved to `tools.wrappers.HLayoutWrapper`
- `layouts.RowLayoutItemWrapper` has been moved to `tools.wrappers.RowLayoutWrapper`
- `layouts.ColumnLayoutItemWrapper` has been moved to `tools.wrappers.ColumnLayoutWrapper`
- `layouts.FormLayoutItemWrapper` has been moved to `tools.wrappers.FormLayoutWrapper`
- `layouts.BorderLayoutItemWrapper` has been moved to `tools.wrappers.BorderLayoutWrapper`
- `tools.AbstractConfig` has been moved to `core.AbstractConfig`
- `widgets.container` has been renamed to `widgets.frame`

### Removed

- `utils.colors`
- `enums.teaching_tip_tails`
- `enums.animation`
- `enums.clipboard`
- `enums.smooth_scroll`


## 0.3.2 (2024-01-13)

### Added

- `widgets.dialogs.MaskDialog` close button title bar.
- `widgets.SpinBox`
- `widgets.DoubleSpinBox`
- `services.parse_css_linear_gradient`
- `utils.maths.deg_to_coordinates`
- `core.AbstractBase` handle add Methods in **kwargs
- #### `tools.qtgui`
  - ActionGroup
  - Clipboard
  - DoubleValidator
  - Drag
  - GuiApplication
  - InputDevice
  - InputMethod
  - IntValidator
  - OffscreenSurface
  - OpenGLContext
  - OpenGLContextGroup
  - PaintDeviceWindow
  - PdfWriter
  - PointingDevice
  - PyTextObject
  - RasterWindow
  - RegularExpressionValidator
  - Screen
  - SessionManager
  - Shortcut
  - StandardItemModel
  - StyleHints
  - SyntaxHighlighter
  - TextBlockGroup
  - TextDocument
  - TextFrame
  - TextList
  - TextObject
  - TextTable
  - UndoGroup
  - UndoStack
  - Validator
  - Window
  - BackingStore
  - Bitmap
  - ColorSpace
  - ConicalGradient
  - Cursor
  - DesktopServices
  - Font
  - GlyphRun
  - Gradient
  - Image
  - ImageIOHandler
  - ImageReader
  - ImageWriter
  - LinearGradient
  - PageLayout
  - PagedPaintDevice
  - PaintEngine
  - Painter
  - PainterPathStroker
  - Palette
  - Pen
  - Picture
  - Pixmap
  - Quaternion
  - RadialGradient
  - Rgba64
  - RhiBuffer
  - RhiColorAttachment
  - RhiCommandBuffer
  - RhiComputePipeline
  - RhiDepthStencilClearValue
  - RhiGraphicsPipeline
  - RhiReadbackDescription
  - RhiRenderBuffer
  - RhiRenderTarget
  - RhiSampler
  - RhiScissor
  - RhiShaderResourceBindings
  - RhiShaderStage
  - RhiSwapChain
  - RhiSwapChainRenderTarget
  - RhiTexture
  - RhiTextureCopyDescription
  - RhiTextureRenderTarget
  - RhiTextureRenderTargetDescription
  - RhiTextureSubresourceUploadDescription
  - RhiTextureUploadDescription
  - RhiTextureUploadEntry
  - RhiVertexInputAttribute
  - RhiVertexInputBinding
  - RhiVertexInputLayout
  - RhiViewport
  - Shader
  - ShaderCode
  - ShaderKey
  - ShaderVersion
  - StandardItem
  - StaticText
  - SurfaceFormat
  - TextBlock
  - TextBlockFormat
  - TextCharFormat
  - TextCursor
  - TextDocumentWriter
  - TextFormat
  - TextFrameFormat
  - TextImageFormat
  - TextInlineObject
  - TextLayout
  - TextLine
  - TextListFormat
  - TextOption
  - TextTableCell
  - TextTableCellFormat
  - TextTableFormat
  - UndoCommand
  - Vector2D
  - Vector3D
  - Vector4D

  #### `tools.qtcore`
  - QAnimationGroup
  - QBuffer
  - QConcatenateTablesProxyModel
  - QCoreApplication
  - QEventLoop
  - QFileDevice
  - QFileSelector
  - QFileSystemWatcher
  - QIODevice
  - QIdentityProxyModel
  - QItemSelectionModel
  - QLibrary
  - QMimeData
  - QPauseAnimation
  - QPluginLoader
  - QProcess
  - QSaveFile
  - QSharedMemory
  - QSignalMapper
  - QSocketNotifier
  - QSortFilterProxyModel
  - QStringListModel
  - QTemporaryFile
  - QThread
  - QThreadPool
  - QTimeLine
  - QTimer
  - QTranslator
  - QTransposeProxyModel
  - QVariantAnimation

- #### `widgets`
  - AbstractButton
  - AbstractItemView
  - AbstractScrollArea
  - AbstractSlider
  - AbstractSpinBox
  - CalendarWidget
  - CheckBox
  - ColorDialog
  - ColumnView
  - ComboBox
  - CommandLinkButton
  - DateEdit
  - DateTimeEdit
  - Dial
  - Dialog
  - DialogButtonBox
  - DockWidget
  - DoubleSpinBox
  - ErrorMessage
  - FileDialog
  - FocusFrame
  - FontComboBox
  - FontDialog
  - GraphicsProxyWidget
  - GraphicsView
  - GraphicsWidget
  - GroupBox
  - HeaderView
  - InputDialog
  - KeySequenceEdit
  - LCDNumber
  - ListView
  - ListWidget
  - MdiArea
  - MdiSubWindow
  - MenuBar
  - MessageBox
  - PlainTextEdit
  - ProgressBar
  - ProgressDialog
  - RadioButton
  - RubberBand
  - ScrollBar
  - Slider
  - SpinBox
  - SplashScreen
  - Splitter
  - SplitterHandle
  - StatusBar
  - TabBar
  - TabWidget
  - TableView
  - TableWidget
  - TextBrowser
  - TextEdit
  - TimeEdit
  - ToolBar
  - ToolBox
  - TreeView
  - TreeWidget
  - UndoView
  - Wizard
  - WizardPage

### Updated

- `widgets.dialogs.TeachingTipDialog` improved
- `core.AbstractDialog` improved
- `tools.Settings` improved system detecting
- `tools.CopyProgress` improved
- `core.AbstractBase` improved

### Changed

- `tools.Alignment` has been moved to `utils.Alignment`
- `tools.Modifiers` has been moved to `utils.Modifiers`
- `core.AbstractWidget` 'long_press' signal has been renamed to long_pressed

### Fixed

- `tools.Settings` **_set_default_path**, when system equal to windows


## 0.3.3 (2024-01-14)

### Added

- `widgets.window.BaseWindow`

### Fixed

- `widgets.ToolButton` requires a 'PySide6.QtWidgets.QPushButton' object but received a 'ToolButton'
- `widgets.FramelessWindow` '__init__' method of object's base class (FramelessWindow) not called.


## 0.4.0 (2024-01-23)

### Added

- `widgets.icon_widget` setIcon method.
- `core.MArgs`
- `widgets.GroupBox` child keyword argument
- #### `tools.qtcore.tools`
  - QBitArray
  - QByteArray
  - QByteArrayMatcher
  - QCollator
  - QDataStream
  - QDate
  - QDateTime
  - QDeadlineTimer
  - QDir
  - QEasingCurve
  - QFileInfo
  - QFutureInterfaceBase
  - QJsonDocument
  - QLine
  - QLineF
  - QLocale
  - QLockFile
  - QLoggingCategory
  - QMargins
  - QMarginsF
  - QNativeIpcKey
  - QPoint
  - QPointF
  - QRect
  - QRectF
  - QRegularExpression
  - QSize
  - QSizeF
  - QSystemSemaphore
  - QTextStream
  - QTime
  - QUrl
  - QUrlQuery
  - QXmlStreamReader
  - QXmlStreamWriter

### Fixed

- `core.AbstractBase` repeating call of [add]Method when inserting to it Iterable value.

### Changed

- `utils.Args` has been moved to `core.Args`
- `utils.Func` has been moved to `core.Func`
- `utils.Routes` has been moved to `core.Routes`
- `utils.QStyleSheet` has been moved to `core.QStyleSheet`
- `utils.exceptionHandler` has been renamed and moved to `core.TryExc`

## 0.4.1 (2024-01-28)

### Added

- `tools.SpacerItem`
- `widgets.ElidingLabel`
- `services.eliding_text`

### Updated

- `core.AbstractBase._set_events`
- `core.AbstractBase` methods argument can accept `core.Args`

### Changed

- #### remove force keyword argument
  - `core.AbstractBase`
  - `core.AbstractTool`
  - `core.AbstractDialog`
  - `core.AbstractWidget`

- `enums.events` remove **event** suffix

### Removed

- `widgets.AbstractButton`
- `widgets.AbstractItemView`
- `widgets.AbstractScrollArea`
- `widgets.AbstractSlider`
- `widgets.AbstractSpinBox`
- `tools.ElidedText`

### Fixed

- `widgets.StackedWidget` Qtica.core.routes.Routes() argument after ** must be a mapping, not dict_items.

## 0.4.2 (2024-02-14)

### Fixed

- `widgets.ElidingLabel` some issus.

### Updated

- `widgets.MaskDialog` improve resize method when change child setFixedSize values.
- `tools.qtcore.tools` can now set `*args` to init method

### Added

- `widgets.MaskDialog` **fixed_size** argument
- `painters.StatusEdgePaint` Styles(ellipse, rectangle, icon)
- `widgets.FrameContainer`
- `widgets.WidgetContainer`
- `widgets.VideoWidget`
- `tools.MediaPlayer`

### Changed

- `widgets.frame.py` renamed to `widgets.container.py`

## 0.4.3 (2024-03-05)

### Added

- `core.AbstractBase` signals,events,methods dict type support
- `core.QStyleSheet` converts Python values to Qss element
  - `BorderRadius`
  - `RadialGradient`
  - `LinearGradient`
  - `BoxShadow`
- `tools.ListWidgetItem`
- `widgets.ListWidget` addItemWidget, addItemDelegate methods

### Fixed

- `tools.qtcore.tools`, `tools.qtgui.tools` has no attribute, in aarch64 machines
            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/qtica-project/Qtica",
    "name": "Qtica",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.10,<3.13",
    "maintainer_email": "",
    "keywords": "qt,pyside6,python,declarative,qml,Qtica,fast,easy,toolkit,tools",
    "author": "Osama Mohammed Al-zabidi",
    "author_email": "qticaproject@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/da/a3/58b171657f3dc44aabbe01afa1d8382c7115c1702ae08335b5a20ad3afcd/qtica-0.4.3.tar.gz",
    "platform": null,
    "description": "<p align=\"center\">\n  <a href=\"https://qticaproject.gitbook.io/qtica/\">\n    <img alt=\"Qtica\" src=\"https://github.com/qtica-project/Qtica/blob/main/logo.png\">\n  </a>\n</p>\n\n<p align=\"center\">\n  A Fast Way to Done Your Idea!\n</p>\n\n<h2 align=\"center\">\n  v0.4.3\n</h2>\n\n# Qtica\n\nQtica is a Python library that offers a lightweight API built around native PySide6. It enables swift GUI prototyping utilizing contemporary declarative UI methods, all within Python.\n\nQtica is currently in active development and not yet ready for stable release.\n\n## Features\n\n- **Lightweight API:** Built around PySide6, Qtica offers a streamlined interface for GUI development.\n- **Declarative UI Techniques:** Facilitates the use of modern UI techniques directly within Python.\n- **Swift Prototyping:** Enables rapid GUI prototyping for efficient development.\n\n\n## Installation\n\nYou can install **Qtica** via pip:\n\n```bash\npip install qtica\n```\n\n\n## Usage\n\n```python\nimport os\nimport sys\nfrom PySide6.QtGui import QColor\nfrom PySide6.QtCore import QSize, Qt\nfrom Qtica.services import randomColor, colorToHex\nfrom Qtica.widgets import MainWindow, Label, Application\nfrom Qtica import BehaviorDec, Api\n\n\nclass Window(BehaviorDec):\n    def get_text_color(self, color: QColor) -> QColor:\n        luma = ((0.299 * color.red()) + (0.587 * color.green()) + (0.114 * color.blue())) / 255\n        return QColor(0, 0, 0) if luma > 0.5 else QColor(255, 255, 255)\n\n    def update_background(self):\n        bg_color = randomColor()\n        fg_color = self.get_text_color(bg_color)\n\n        Api.fetch(\"window\").qss.update({\"background-color\": bg_color.name()})\n        Api.fetch(\"label\").qss.update({\"color\": fg_color.name()})\n\n    def __init__(self):\n        return MainWindow(\n            uid=\"window\",\n            windowTitle=\"Welcome Qtica!\",\n            methods = [\n                (\"resize\", QSize(400, 200))\n            ],\n            events = [\n                (\"mousePress\", lambda _: self.update_background())\n            ],\n            home=Label(\n                uid=\"label\",\n                setText=f\"Hello {os.environ.get('USER', '')}, Welcome to Qtica.<br>Click me!\",\n                setTextFormat=Qt.TextFormat.RichText,\n                setAlignment=Qt.AlignmentFlag.AlignCenter,\n                qss={\"font-size\": \"24px\"}\n            ),\n            qss={\"background-color\": colorToHex(randomColor())},\n        )\n\napp = Application(sys.argv)\nwindow = Window()\nwindow.show()\nsys.exit(app.exec())\n```\n\n\n## Documentation\n\nFor more information and detailed usage examples, refer to the [documentation](https://omamkaz.gitbook.io/qtica/).\n\n\n## License\n\nThis project is licensed under the [GPL3 License](https://github.com/qtica-project/Qtica/blob/main/LICENSE).\n\n\n## NOTE\n\nWelcome to Qtica!\n\nThank you for choosing Qtica! Please be aware that this library is continuously evolving and is not yet considered stable as it's actively under development. We encourage you to use it for experimentation and kindly ask for your feedback, bug reports, suggestions, or improvements that align with your preferences. Your input is invaluable! \ud83d\ude0a\n\nThank you for being a part of Qtica's development journey!\n# Changelog\n\n## 0.1.1 - (2023-11-05)\n\n### Added\n\n- #### PySide6 Built-in Widgets\n\n  - QApplication\n  - QPushButton\n  - QLabel\n  - QFrame\n  - QMainWindow\n  - QSystemTrayIcon\n  - QGraphicsView\n  - QWidget\n  - QQuickWidget\n  - QQuickView\n  - QGraphicsOpacityEffect\n  - QGraphicsDropShadowEffect\n  - QGraphicsColorizeEffect\n  - QGraphicsBlurEffect\n  - QFormLayout\n  - QGridLayout\n  - QHBoxLayout\n  - QStackedLayout\n  - QVBoxLayout\n\n- #### PySide6 Additional Widgets\n\n  - WigglyWidget\n  - WaterRippleProgressBar\n  - WaterProgressBar\n  - ProgressIndicator\n  - MovieView\n  - MetroCircleProgress\n  - ElidingLabel\n  - FramelessWindow\n  - RoutingWindow\n  - TeachingTip\n  - SlidingStackedWidget\n  - SideBarWidget\n  - TerminalWidget\n  - NavBarWidget\n  - SilentTextDialog\n  - LargTextDialog\n  - ColourfulProgressBar\n  - OutsideNeumorphismEffect\n  - InsideNeumorphismEffect\n  - FlowLayout\n  - ExpandLayout\n\n- #### PySide6 Built-in Core\n\n  - QPropertyAnimation\n\n- #### PySide6 Additional Core\n  - StyleAnimation\n  - ProgressStyleAnimation\n  - Animation\n\n## 0.1.2 - (2023-11-07)\n\n### Added\n\n- Qtica `logo.png`\n- version_generator.py example\n- status_edge.py example\n- resources, and fonts into the `Application` class.\n- `tools.Painter class`\n- `tools.PaintStatusEdge`\n- `widgets.FramelessWindowSizeGrip`\n\n### Changed\n\n- `enums.Sizes.size_hint` -> `enums.Sizes.hint`\n\n### Fixed\n\n- `core.BehaviorDeclarative`, no uid in `__init__` parameters\n\n## 0.1.3 - (2023-11-12)\n\n### Added\n\n- `widgets.ThemeSwitchButton`\n- `enums.AbstractIcons` to make enum icons that work with Qtica tools\n- `tools.Icon`\n- `utils.color.DetectImageColors`, using to get an image colors map.\n- `utils.color.get_image_average_color`, get an image rgb color\n- `widgets.LineEdit`\n- `core.WidgetBase` effect argument.\n- `core.AbstractBase` \\*\\*kwargs, can now accept set value for method.\n- `widgets.ScrollArea`\n- get_start.py example\n\n### Changed\n\n- `Theme.system_theme` to static method type.\n- `effects.*` from ObjectDeclarative class type to `ObjectBase`\n- `utils.color.get_hex_from_color` color arg to \\*rgb arg\n\n### Fixed\n\n- pixmap error when you try to add `QIcon` to `tools.Icon` with color value.\n\n## 0.1.4 (2023-11-24)\n\n### Added\n\n- extras `icons` modules `elusive` `feather` `fluent` `fontawesome` `material`\n- `widgets.FramelessWindowSizeGrip` edge option.\n- `utils.methods.qt_corner_to_edge` convert Qt.Corner inputs to Qt.Edge values.\n- `widgets.StackedWidget` QStackedWidget built-in PySide6 class\n- `widgets.IconWidget`\n- `widgets.MaskDialog`\n\n### Fixed\n\n- `widgets.FramelessWindow` window geometry changed when move window.\n- `widgets.FramelessWindowSizeGrip` cursor shape for SizeGrip hover.\n- `tools.Icon` list index out of range, when used colored icon\n\n### Updated\n\n- `widgets.NavBarButton` it's now subclass from `core.WidgetBase`\n\n## 0.2.0 (2023-12-08)\n\n### Added\n\n- `widgets.HLine`, Horizontal Frame widget.\n- `widgets.VLine`, Vertical Frame widget.\n- `widgets.ToolButton` PySide6 Built-in QToolButton\n- `core.QStyleSheet` restore_qss method to restore last Qss value after update_qss call with save=False.\n- `tools.StatusEdgePaint` corner option.\n- `widgets.MainWindow`, `widgets.FramelessWindow`, `widgets.RoutingWindow` sys_tray parameter.\n- `widgets.Menu`, fork for PySide6.QtWidgets.QMenu.\n- `tools.Action` fork for PySide6.QtGui.QAction.\n- `utils.colors`\n- `core.AbstractBase` `methods` parameter.\n- `core.AbstractTool`, `core.ToolBase`\n- `core.AbstractIcon`, `core.IconBase`\n- `core.AbstractPainter`, `core.PainterBase`\n\n### Removed\n\n- `tools.Painter` `__init__` return parent widget, you can now return from subclasses.\n- `core.Return`, we dont't need it any more!\n\n### Updated\n\n- `layouts.HLayout`, and `layouts.VLayout` now you can add `QSpacerItem`, and `QLayoutItem` widget types to children\n- `core.QStyleSheet` improve Qss Parser.\n- `core.QStyleSheet` qss now accepting json files.\n- `widgets.LineEdit` password_mode parameter, add password echo mode support\n- `widgets.SlidingStackedWidget` now children parameter support Route\n\n### Fixed\n\n- `tools.Icon` default color value -1, when color is None\n- `core.Api.fetch` method NoneType error when fetching `PySide6.QtWidgets.QApplication` class type.\n\n### Changed\n\n- `tools.PaintStatusEdge` to `tools.StatusEdgePaint`\n- `tools.ObjectBase` to `tools.QObjectBase`\n- `widgets.QuickWidget` parameter `file` to `qml`\n- `widgets.QuickView` parameter `file` to `qml`\n\n## 0.2.1 (2023-12-09)\n\n### Added\n\n- `utils.caseconverter`, forking `caseconverter` module to be as built-in\n\n### Changed\n\n- moving pynput from dependencies to extras dependence.\n\n### Removed\n\n- `requirements.txt`, we don't need it anymore, you can use poetry to install requirements.\n\n## 0.3.0 (2024-01-03)\n\n### Changed\n\n- `core.Api.fetch` \\type argument has been renamed to qtype\n- `widgets.MovieView` has been moved and renamed to `tools.Movie`\n- `tools.EnvVar` has been moved to `utils.EnvVar`\n- `widgets.Application` list_styles has been renamed to style_list\n- `core.WidgetBase` has been renamed to `AbstractWidget`\n- `core.ObjectBase` has been renamed to `AbstractQObject`\n- `core.BehavioDeclarative` has been renamed to `BehavioDec`\n- `core.QStyleSheet` has been moved to `utils.QStyleSheet`\n- `core.WidgetDeclarative` has been renamed to `WidgetDec`\n- `core.ObjectDeclarative` has been renamed to `QObjectDec`\n- `core.TrackingDeclarative` has been renamed to TrackingDec`\n- `utils.colors.get_image_average_color` has been renamed to `imageAverageColor`\n- `utils.colors.imageAverageColor` return `QColor` type insted `list[int]`\n- `utils.colors.get_color_from_hex` has been renamed to `hexToColor`\n- `utils.colors.get_hex_from_color` has been renamed to `colorToHex`\n- `utils.colors.get_random_color` has been renamed to `randomColor`\n- `enums.TeachingTipTailPositions` has been renamed to `TeachingTipTailPos`\n- `widgets.ScrollArea` child can know accepted `QLayout` Objects\n- `core.AbstractBase.get` has been renamed to `fetch`\n- `utils.colors.Contrast.color_type` has been renamed to `color_mode`\n- `core.AbstractPainter._repaint` has been renamed to `repaint`\n- `core.AbstractPainter._paint` has been renamed to `_paint` \n- `core.AbstractPainter._super_paintEvent` has been renamed to `super_paintEvent` \n\n### Updated\n\n- `core.AbstractBase` events keyword, now can accept methods without 'Event' suffix\n- `enums.EnvVars`, some variables added\n- `core.AbstractWidget` - `core.AbstractWidget` Now you can add an event method without writing the 'Event' suffix, and the class will auto-detect the method.\n- `utils.Routes` add support for QStackedLayout\n\n### Fixed\n\n- `core.Api.fetch` Improve QObject Finder\n- `utils.colors.ImageColors.most_common` change from property to method\n- `core.AbstractDec` saving uid for objects how was have `objectName` method.\n\n### Added\n\n- supporting for PySide6.{5,6}.x versions\n- `widgets.IconWidget` support `QMovie` animation image.\n- `core.AbstractWidget` long_press Signal\n- `core.AbstractBase.enable_event_stack`, know you can stack a widget event.\n- `sys_tray.py` to examples folder.\n- `stack.py` to examples folder.\n- `core.AbstractIcons`\n- `core.AbstractTool`\n- `core.AbstractPainter`\n- `core.AbstractDec`\n- `utils.theme_detect` forked to be Qtica built-in module\n- `layouts.ColumnLayout`\n- `layouts.ColumnLayoutItemWrapper`\n- `layouts.RowLayout`\n- `layouts.RowLayoutItemWrapper`\n- `layouts.BorderLayout`\n- `layouts.BorderLayoutItemWrapper`\n- `core.Api.dec_fetch`\n- `enums.Theme`\n- `services.showDialog`\n- `services.TakeScreenShot`\n- `services.UrlOpen`\n- `tools.SystemTray`\n- `tools.Action`\n- `widgets.Stack`\n- `tools.Pen`\n- `painters.CircularProgressPaint`\n- `core.AbstractDialog`\n- `widgets.dialogs.TeachingTipDialog`\n- `tools.action.LinePasswordAction`\n\n\n## 0.3.1 (2024-01-09)\n\n### Added\n\n- `animations.ParallelAnimationGroup`\n- `animations.SequentialAnimationGroup`\n- `tools.Brush`\n\n### Changed\n\n- `Qtica.animation` has been renamed to `Qtica.animations`\n- `tools.painters` has been moved to the main directory of Qtica `Qtica.painters`\n- `layouts.GridLayoutItemWrapper` has been moved to `tools.wrappers.GridLayoutWrapper`\n- `layouts.VLayoutItemWrapper` has been moved to `tools.wrappers.VLayoutWrapper`\n- `layouts.HLayoutItemWrapper` has been moved to `tools.wrappers.HLayoutWrapper`\n- `layouts.RowLayoutItemWrapper` has been moved to `tools.wrappers.RowLayoutWrapper`\n- `layouts.ColumnLayoutItemWrapper` has been moved to `tools.wrappers.ColumnLayoutWrapper`\n- `layouts.FormLayoutItemWrapper` has been moved to `tools.wrappers.FormLayoutWrapper`\n- `layouts.BorderLayoutItemWrapper` has been moved to `tools.wrappers.BorderLayoutWrapper`\n- `tools.AbstractConfig` has been moved to `core.AbstractConfig`\n- `widgets.container` has been renamed to `widgets.frame`\n\n### Removed\n\n- `utils.colors`\n- `enums.teaching_tip_tails`\n- `enums.animation`\n- `enums.clipboard`\n- `enums.smooth_scroll`\n\n\n## 0.3.2 (2024-01-13)\n\n### Added\n\n- `widgets.dialogs.MaskDialog` close button title bar.\n- `widgets.SpinBox`\n- `widgets.DoubleSpinBox`\n- `services.parse_css_linear_gradient`\n- `utils.maths.deg_to_coordinates`\n- `core.AbstractBase` handle add Methods in **kwargs\n- #### `tools.qtgui`\n  - ActionGroup\n  - Clipboard\n  - DoubleValidator\n  - Drag\n  - GuiApplication\n  - InputDevice\n  - InputMethod\n  - IntValidator\n  - OffscreenSurface\n  - OpenGLContext\n  - OpenGLContextGroup\n  - PaintDeviceWindow\n  - PdfWriter\n  - PointingDevice\n  - PyTextObject\n  - RasterWindow\n  - RegularExpressionValidator\n  - Screen\n  - SessionManager\n  - Shortcut\n  - StandardItemModel\n  - StyleHints\n  - SyntaxHighlighter\n  - TextBlockGroup\n  - TextDocument\n  - TextFrame\n  - TextList\n  - TextObject\n  - TextTable\n  - UndoGroup\n  - UndoStack\n  - Validator\n  - Window\n  - BackingStore\n  - Bitmap\n  - ColorSpace\n  - ConicalGradient\n  - Cursor\n  - DesktopServices\n  - Font\n  - GlyphRun\n  - Gradient\n  - Image\n  - ImageIOHandler\n  - ImageReader\n  - ImageWriter\n  - LinearGradient\n  - PageLayout\n  - PagedPaintDevice\n  - PaintEngine\n  - Painter\n  - PainterPathStroker\n  - Palette\n  - Pen\n  - Picture\n  - Pixmap\n  - Quaternion\n  - RadialGradient\n  - Rgba64\n  - RhiBuffer\n  - RhiColorAttachment\n  - RhiCommandBuffer\n  - RhiComputePipeline\n  - RhiDepthStencilClearValue\n  - RhiGraphicsPipeline\n  - RhiReadbackDescription\n  - RhiRenderBuffer\n  - RhiRenderTarget\n  - RhiSampler\n  - RhiScissor\n  - RhiShaderResourceBindings\n  - RhiShaderStage\n  - RhiSwapChain\n  - RhiSwapChainRenderTarget\n  - RhiTexture\n  - RhiTextureCopyDescription\n  - RhiTextureRenderTarget\n  - RhiTextureRenderTargetDescription\n  - RhiTextureSubresourceUploadDescription\n  - RhiTextureUploadDescription\n  - RhiTextureUploadEntry\n  - RhiVertexInputAttribute\n  - RhiVertexInputBinding\n  - RhiVertexInputLayout\n  - RhiViewport\n  - Shader\n  - ShaderCode\n  - ShaderKey\n  - ShaderVersion\n  - StandardItem\n  - StaticText\n  - SurfaceFormat\n  - TextBlock\n  - TextBlockFormat\n  - TextCharFormat\n  - TextCursor\n  - TextDocumentWriter\n  - TextFormat\n  - TextFrameFormat\n  - TextImageFormat\n  - TextInlineObject\n  - TextLayout\n  - TextLine\n  - TextListFormat\n  - TextOption\n  - TextTableCell\n  - TextTableCellFormat\n  - TextTableFormat\n  - UndoCommand\n  - Vector2D\n  - Vector3D\n  - Vector4D\n\n  #### `tools.qtcore`\n  - QAnimationGroup\n  - QBuffer\n  - QConcatenateTablesProxyModel\n  - QCoreApplication\n  - QEventLoop\n  - QFileDevice\n  - QFileSelector\n  - QFileSystemWatcher\n  - QIODevice\n  - QIdentityProxyModel\n  - QItemSelectionModel\n  - QLibrary\n  - QMimeData\n  - QPauseAnimation\n  - QPluginLoader\n  - QProcess\n  - QSaveFile\n  - QSharedMemory\n  - QSignalMapper\n  - QSocketNotifier\n  - QSortFilterProxyModel\n  - QStringListModel\n  - QTemporaryFile\n  - QThread\n  - QThreadPool\n  - QTimeLine\n  - QTimer\n  - QTranslator\n  - QTransposeProxyModel\n  - QVariantAnimation\n\n- #### `widgets`\n  - AbstractButton\n  - AbstractItemView\n  - AbstractScrollArea\n  - AbstractSlider\n  - AbstractSpinBox\n  - CalendarWidget\n  - CheckBox\n  - ColorDialog\n  - ColumnView\n  - ComboBox\n  - CommandLinkButton\n  - DateEdit\n  - DateTimeEdit\n  - Dial\n  - Dialog\n  - DialogButtonBox\n  - DockWidget\n  - DoubleSpinBox\n  - ErrorMessage\n  - FileDialog\n  - FocusFrame\n  - FontComboBox\n  - FontDialog\n  - GraphicsProxyWidget\n  - GraphicsView\n  - GraphicsWidget\n  - GroupBox\n  - HeaderView\n  - InputDialog\n  - KeySequenceEdit\n  - LCDNumber\n  - ListView\n  - ListWidget\n  - MdiArea\n  - MdiSubWindow\n  - MenuBar\n  - MessageBox\n  - PlainTextEdit\n  - ProgressBar\n  - ProgressDialog\n  - RadioButton\n  - RubberBand\n  - ScrollBar\n  - Slider\n  - SpinBox\n  - SplashScreen\n  - Splitter\n  - SplitterHandle\n  - StatusBar\n  - TabBar\n  - TabWidget\n  - TableView\n  - TableWidget\n  - TextBrowser\n  - TextEdit\n  - TimeEdit\n  - ToolBar\n  - ToolBox\n  - TreeView\n  - TreeWidget\n  - UndoView\n  - Wizard\n  - WizardPage\n\n### Updated\n\n- `widgets.dialogs.TeachingTipDialog` improved\n- `core.AbstractDialog` improved\n- `tools.Settings` improved system detecting\n- `tools.CopyProgress` improved\n- `core.AbstractBase` improved\n\n### Changed\n\n- `tools.Alignment` has been moved to `utils.Alignment`\n- `tools.Modifiers` has been moved to `utils.Modifiers`\n- `core.AbstractWidget` 'long_press' signal has been renamed to long_pressed\n\n### Fixed\n\n- `tools.Settings` **_set_default_path**, when system equal to windows\n\n\n## 0.3.3 (2024-01-14)\n\n### Added\n\n- `widgets.window.BaseWindow`\n\n### Fixed\n\n- `widgets.ToolButton` requires a 'PySide6.QtWidgets.QPushButton' object but received a 'ToolButton'\n- `widgets.FramelessWindow` '__init__' method of object's base class (FramelessWindow) not called.\n\n\n## 0.4.0 (2024-01-23)\n\n### Added\n\n- `widgets.icon_widget` setIcon method.\n- `core.MArgs`\n- `widgets.GroupBox` child keyword argument\n- #### `tools.qtcore.tools`\n  - QBitArray\n  - QByteArray\n  - QByteArrayMatcher\n  - QCollator\n  - QDataStream\n  - QDate\n  - QDateTime\n  - QDeadlineTimer\n  - QDir\n  - QEasingCurve\n  - QFileInfo\n  - QFutureInterfaceBase\n  - QJsonDocument\n  - QLine\n  - QLineF\n  - QLocale\n  - QLockFile\n  - QLoggingCategory\n  - QMargins\n  - QMarginsF\n  - QNativeIpcKey\n  - QPoint\n  - QPointF\n  - QRect\n  - QRectF\n  - QRegularExpression\n  - QSize\n  - QSizeF\n  - QSystemSemaphore\n  - QTextStream\n  - QTime\n  - QUrl\n  - QUrlQuery\n  - QXmlStreamReader\n  - QXmlStreamWriter\n\n### Fixed\n\n- `core.AbstractBase` repeating call of [add]Method when inserting to it Iterable value.\n\n### Changed\n\n- `utils.Args` has been moved to `core.Args`\n- `utils.Func` has been moved to `core.Func`\n- `utils.Routes` has been moved to `core.Routes`\n- `utils.QStyleSheet` has been moved to `core.QStyleSheet`\n- `utils.exceptionHandler` has been renamed and moved to `core.TryExc`\n\n## 0.4.1 (2024-01-28)\n\n### Added\n\n- `tools.SpacerItem`\n- `widgets.ElidingLabel`\n- `services.eliding_text`\n\n### Updated\n\n- `core.AbstractBase._set_events`\n- `core.AbstractBase` methods argument can accept `core.Args`\n\n### Changed\n\n- #### remove force keyword argument\n  - `core.AbstractBase`\n  - `core.AbstractTool`\n  - `core.AbstractDialog`\n  - `core.AbstractWidget`\n\n- `enums.events` remove **event** suffix\n\n### Removed\n\n- `widgets.AbstractButton`\n- `widgets.AbstractItemView`\n- `widgets.AbstractScrollArea`\n- `widgets.AbstractSlider`\n- `widgets.AbstractSpinBox`\n- `tools.ElidedText`\n\n### Fixed\n\n- `widgets.StackedWidget` Qtica.core.routes.Routes() argument after ** must be a mapping, not dict_items.\n\n## 0.4.2 (2024-02-14)\n\n### Fixed\n\n- `widgets.ElidingLabel` some issus.\n\n### Updated\n\n- `widgets.MaskDialog` improve resize method when change child setFixedSize values.\n- `tools.qtcore.tools` can now set `*args` to init method\n\n### Added\n\n- `widgets.MaskDialog` **fixed_size** argument\n- `painters.StatusEdgePaint` Styles(ellipse, rectangle, icon)\n- `widgets.FrameContainer`\n- `widgets.WidgetContainer`\n- `widgets.VideoWidget`\n- `tools.MediaPlayer`\n\n### Changed\n\n- `widgets.frame.py` renamed to `widgets.container.py`\n\n## 0.4.3 (2024-03-05)\n\n### Added\n\n- `core.AbstractBase` signals,events,methods dict type support\n- `core.QStyleSheet` converts Python values to Qss element\n  - `BorderRadius`\n  - `RadialGradient`\n  - `LinearGradient`\n  - `BoxShadow`\n- `tools.ListWidgetItem`\n- `widgets.ListWidget` addItemWidget, addItemDelegate methods\n\n### Fixed\n\n- `tools.qtcore.tools`, `tools.qtgui.tools` has no attribute, in aarch64 machines",
    "bugtrack_url": null,
    "license": "GPL-3.0",
    "summary": "Qtica is a Python library that offers a lightweight API built around native PySide6. It enables swift GUI prototyping utilizing contemporary declarative UI methods, all within Python.",
    "version": "0.4.3",
    "project_urls": {
        "Documentation": "https://qticaproject.gitbook.io/qtica",
        "Homepage": "https://github.com/qtica-project/Qtica",
        "Repository": "https://github.com/qtica-project/Qtica"
    },
    "split_keywords": [
        "qt",
        "pyside6",
        "python",
        "declarative",
        "qml",
        "qtica",
        "fast",
        "easy",
        "toolkit",
        "tools"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ecf17bff504cc091f543bdf61ce9f826aa5e619eda083c9a5f25e655e73c5386",
                "md5": "ced80805660602df3a36fbf8ee65510c",
                "sha256": "79e83a36307084bd25387ab5381a2ee837082c337bbbb8e90c801e6ff56435ad"
            },
            "downloads": -1,
            "filename": "qtica-0.4.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "ced80805660602df3a36fbf8ee65510c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10,<3.13",
            "size": 127561,
            "upload_time": "2024-03-05T02:00:11",
            "upload_time_iso_8601": "2024-03-05T02:00:11.855742Z",
            "url": "https://files.pythonhosted.org/packages/ec/f1/7bff504cc091f543bdf61ce9f826aa5e619eda083c9a5f25e655e73c5386/qtica-0.4.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "daa358b171657f3dc44aabbe01afa1d8382c7115c1702ae08335b5a20ad3afcd",
                "md5": "0b19d9503e62db29ede9d094aa2c0138",
                "sha256": "321b2a7a4f2393a53ab20de421f2cebddce24bd158ac9567b92eea6c99468232"
            },
            "downloads": -1,
            "filename": "qtica-0.4.3.tar.gz",
            "has_sig": false,
            "md5_digest": "0b19d9503e62db29ede9d094aa2c0138",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10,<3.13",
            "size": 423835,
            "upload_time": "2024-03-05T02:00:18",
            "upload_time_iso_8601": "2024-03-05T02:00:18.340066Z",
            "url": "https://files.pythonhosted.org/packages/da/a3/58b171657f3dc44aabbe01afa1d8382c7115c1702ae08335b5a20ad3afcd/qtica-0.4.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-05 02:00:18",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "qtica-project",
    "github_project": "Qtica",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "qtica"
}
        
Elapsed time: 0.20425s