<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.6.0
</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
## 0.5.0 (2024-05-24)
### Added
- `layout.stacked.StackedLayout` Routes, dict types support.
- `enums.QPA_Platforms` vnc, wayland_egl, vkkhrdisplay
- `core.AbstractWidget` **PosEventsRange**, **PosEventsArg**, **PosEvents** classes
- `core.AbstractWidget` **at_pos** argument.
- `widgets.QuickWidget`
- `tools.qtcore.objects.File`
- `tools.TempFile`
- `utils.BaseDir`
- `utils.Modifiers`, `utils.Keys`, `utils.KeySequence`
- `tools.LayoutWrapper`
### Fixed
- `core.AbstractBase` value type error when insert MArgs class type to add[Methods]
### Changed
- `tools.File` has been renamed to `tools.OpenFile`
- `utils.modifiers.py` has been renamed to `utils.key_events.py`
### Updated
- `widgets.QuickWidget` **qml** argument can accept QML code from string.
### Removed
- `utils.CheckNone`
- `tools.`
- `HLayoutWrapper`
- `ColumnLayoutWrapper`
- `RowLayoutWrapper`
- `VLayoutWrapper`
## 0.6.0 (2024-06-26)
## Added
- `widgets.SvgWidget`
- `tools.SvgRenderer`
- `tools.SvgGenerator`
- `core.AbstractIODevice`
- `core.AbstractContainer`
- `core.AbstractBoxLayout`
- `core.AbstractButton`
- `core.AbstractWindow`
- `tools.qtmultimedia`
- `utils.MouseButtons`
- `effects.BoxShadow`
- `effects.ShadowEffect`
## Updated
- `widgets.AbstractContainer` you can now add list of widgets to **child** argument as children of container widgets.
## Removed
- `widgets.ListWidget.addItemDelegate`
- `widgets.window.BaseWindow` **dockwidgets** argument
- `widgets.window.BaseWindow` **toolbars** argument
- `tools.wrappers.DockWidgetWrapper` we don't need it anymore
- `tools.wrappers.ToolBarWrapper`, `tools.wrappers.ToolBarBreakWrapper` we don't need it anymore
## Changed
- `widgets.window.BaseWindow` **home** argument has been renamed to **child**
- `tools.SizePolicy` **horizontal**, **vertical** arguments has been renamed to **hsizetype**, **vsizetype**
- `tools.wrappers.GridLayoutWrapper` **col** argument has been renamed to **column**
Raw data
{
"_id": null,
"home_page": "https://github.com/qtica-project/Qtica",
"name": "Qtica",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.13,>=3.10",
"maintainer_email": null,
"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/92/d5/973e02aba76c27fe76e789548bf60cd79efa81553d727fff8134d7e042a7/qtica-0.6.0.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.6.0\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## Installation\n\nYou can install **Qtica** via pip:\n\n```bash\npip install qtica\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## Documentation\n\nFor more information and detailed usage examples, refer to the [documentation](https://omamkaz.gitbook.io/qtica/).\n\n## License\n\nThis project is licensed under the [GPL3 License](https://github.com/qtica-project/Qtica/blob/main/LICENSE).\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\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\n\n## 0.5.0 (2024-05-24)\n\n### Added\n\n- `layout.stacked.StackedLayout` Routes, dict types support.\n- `enums.QPA_Platforms` vnc, wayland_egl, vkkhrdisplay\n- `core.AbstractWidget` **PosEventsRange**, **PosEventsArg**, **PosEvents** classes\n- `core.AbstractWidget` **at_pos** argument.\n- `widgets.QuickWidget`\n- `tools.qtcore.objects.File`\n- `tools.TempFile`\n- `utils.BaseDir`\n- `utils.Modifiers`, `utils.Keys`, `utils.KeySequence`\n- `tools.LayoutWrapper`\n\n### Fixed\n\n- `core.AbstractBase` value type error when insert MArgs class type to add[Methods]\n\n### Changed\n\n- `tools.File` has been renamed to `tools.OpenFile`\n- `utils.modifiers.py` has been renamed to `utils.key_events.py`\n\n### Updated\n\n- `widgets.QuickWidget` **qml** argument can accept QML code from string.\n\n### Removed\n\n- `utils.CheckNone`\n- `tools.`\n - `HLayoutWrapper`\n - `ColumnLayoutWrapper`\n - `RowLayoutWrapper`\n - `VLayoutWrapper`\n\n## 0.6.0 (2024-06-26)\n\n## Added\n\n- `widgets.SvgWidget`\n- `tools.SvgRenderer`\n- `tools.SvgGenerator`\n- `core.AbstractIODevice`\n- `core.AbstractContainer`\n- `core.AbstractBoxLayout`\n- `core.AbstractButton`\n- `core.AbstractWindow`\n- `tools.qtmultimedia`\n- `utils.MouseButtons`\n- `effects.BoxShadow`\n- `effects.ShadowEffect`\n\n## Updated\n\n- `widgets.AbstractContainer` you can now add list of widgets to **child** argument as children of container widgets.\n\n## Removed\n\n- `widgets.ListWidget.addItemDelegate`\n- `widgets.window.BaseWindow` **dockwidgets** argument\n- `widgets.window.BaseWindow` **toolbars** argument\n- `tools.wrappers.DockWidgetWrapper` we don't need it anymore\n- `tools.wrappers.ToolBarWrapper`, `tools.wrappers.ToolBarBreakWrapper` we don't need it anymore\n\n## Changed\n\n- `widgets.window.BaseWindow` **home** argument has been renamed to **child**\n- `tools.SizePolicy` **horizontal**, **vertical** arguments has been renamed to **hsizetype**, **vsizetype**\n- `tools.wrappers.GridLayoutWrapper` **col** argument has been renamed to **column**",
"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.6.0",
"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": "f88768d4ac0a1700498a347ff226589647d95081a7dad73bb081876c64316397",
"md5": "08b8cc4b660f3d1a65a235509e8557d5",
"sha256": "a8e01ca8be620a97e00680b864614382d5e9400ef0d800c11eb35edc71b85532"
},
"downloads": -1,
"filename": "qtica-0.6.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "08b8cc4b660f3d1a65a235509e8557d5",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.13,>=3.10",
"size": 136458,
"upload_time": "2024-06-26T05:37:46",
"upload_time_iso_8601": "2024-06-26T05:37:46.680650Z",
"url": "https://files.pythonhosted.org/packages/f8/87/68d4ac0a1700498a347ff226589647d95081a7dad73bb081876c64316397/qtica-0.6.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "92d5973e02aba76c27fe76e789548bf60cd79efa81553d727fff8134d7e042a7",
"md5": "3cfc668a79e78464bb6e63cd4eb8f98d",
"sha256": "f78ca05d8ce7fb893c67e7327b5afe4af9a8a224cd51a05c3b91fe3af163b124"
},
"downloads": -1,
"filename": "qtica-0.6.0.tar.gz",
"has_sig": false,
"md5_digest": "3cfc668a79e78464bb6e63cd4eb8f98d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.13,>=3.10",
"size": 425164,
"upload_time": "2024-06-26T05:37:53",
"upload_time_iso_8601": "2024-06-26T05:37:53.201629Z",
"url": "https://files.pythonhosted.org/packages/92/d5/973e02aba76c27fe76e789548bf60cd79efa81553d727fff8134d7e042a7/qtica-0.6.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-26 05:37:53",
"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"
}