py-imgui-redux


Namepy-imgui-redux JSON
Version 3.0.2 PyPI version JSON
download
home_pageNone
SummaryA python wrapper for DearImGUI and popular extensions
upload_time2024-06-09 05:06:18
maintainerNone
docs_urlNone
authorAlagyn
requires_python>=3.7
licenseNone
keywords
VCS
bugtrack_url
requirements build setuptools wheel twine tomli
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <img src="https://github.com/alagyn/py-imgui-redux/blob/main/docs/pyimgui-logo-512.png?raw=true" width="256" align="right"/>


# PyImGui
DearImGui wrapper for python made with PyBind11

---

Read below for adjustments made to the standard APIs.
Otherwise, all documentation from the original libraries remains 100% valid.
Check out the examples folder for some concrete code.

## Install

Install the latest version with pip
```
pip install py-imgui-redux
```

## Modules:

`imgui` - [Core DearImGUI](https://github.com/ocornut/imgui)  
`imgui.implot` - [ImPlot library](https://github.com/epezent/implot)  
`imgui.imnodes` - [ImNodes library](https://github.com/Nelarius/imnodes)  
`imgui.glfw` - [GLFW Bindings](https://www.glfw.org)


## Backends:

This module only uses the GFLW+OpenGL3 backend. `imgui.glfw` provides full access to GLFW's API, see below for it's adjustments

---

## API Adjustments

I am writing this library with the primary goal of keeping the original Dear ImGui functional
API as intact as possible. This is because:
1. I want to keep all C++ examples and documentation as relevant as possible since I am lazy and don't want to rewrite everything.
2. I have a love-hate relationship with snake-case.

However, there are some minor compromises that have to be made in order to make this happen, primarily in the case of pointers and lists.

### Pointers

Take for instance the function:
```c++
bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, /* other args... */);
```
1. This function returns true if the state changed
2. `v_current_min` and `v_current_max` are pointers to state, and will be read and updated if a change is made

Typical C++ usage
```c++
int min = 0;
int max = 5;
// Code ...
if(imgui::DragIntRange2("Label", &min, &max))
{
    // Code that happens if a change was made
}
```

Python, however, will not let you pass an integer by reference normally, let alone across the C API.
Therefore, the py-imgui-redux method of accomplishing this:
```python
min_val = imgui.IntRef(0)
max_val = imgui.IntRef(5)
# Code ...
if imgui.DragIntRange2("Label", min_val, max_val):
    # Code that happens if a change was made
    pass
```

These are thin wrappers around a single value.
```python
imgui.IntRef
imgui.FloatRef
imgui.BoolRef
# The value can be accessed like so
myNum = imgui.IntRef(25)
myNum.val += 2
```

---

### Lists

Take for instance the function
```c++
bool DragInt3(const char* label, int v[3], /* args ... */);
```

A standard python list is stored sequentially in memory, but the raw *values* themselves are wrapped in a python object. Therefore, we cannot easily iterate over *just* the ints/floats, let alone get a pointer to give to ImGui. PyBind11 will happily take a python list and turn it into a vector for us, but in doing so requires making a copy of the list (not ideal for large lists)

This is solved in one of two ways.  

Method 1: py-imgui-redux Wrappers
```python
vals = imgui.IntList([0, 5, 10])
if imgui.DragInt3("Label", vals):
    # updating code
    pass
```

These are thin wrappers around a C++ vector. They have standard
python list access functions and iteration capabilities.
```python
imgui.IntList
imgui.FloatList
imgui.DoubleList

x = imgui.IntList()
x.append(25)
x.append(36)

print(len(x))

for val in x:
    print(x)

x[0] = 12

```
See their docs for more information and all functions.
  
Functions that mutate the data, such as vanilla ImGui widgets will
use this method. 

Method 2: Numpy Arrays
```python
import numpy as np
xs = np.array([0, 5, 10])
ys = np.array([0, 5, 10])
# Code...
implot.PlotScatter("Scatter", xs, ys, len(xs))
```
The implot submodule uses these, as they prevent the need to copy potentially large arrays, and implot functions will not need to change the data as it reads it. Numpy
is also easier to use for data manipulations as is typical with plotting.

---
Thirdly, references to strings are handled similarily to lists (it's actually a subclass of the List wrappers).

Take for instance the function
```c++
bool InputText(const char* label, char* buf, size_t buf_size, /* args ... */);
```
Which takes a pointer to the IO buffer, and also and argument for its size.

In Python:
```python
myStr = imgui.StrRef("This is a string", maxSize=20)
# Code ...
if imgui.InputText("Label", myStr):
    # code if the text changes
    pass
```
Notice that you don't need to pass the size, this is baked into the StrRef.
Note: `maxSize` automatically takes into account string terminators, i.e. `maxSize=20` means
your string can hold 20 chars.

To change the maxSize:
```python
myStr.resize(25)
```
Changing the size lower will drop any extra chars.

To get your string back
```python
# make a copy
x = str(myStr)
# or
x = myStr.copy()

# get a temporary/unsafe pointer
# useful for printing large strings without copying
# only use said pointer while the object exists
# lest ye summon the dreaded seg-fault
print(myStr.view())
```

---

### Images

Loading images for rendering is simple
```python
import imgui

texture = imgui.LoadTextureFile("myImage.jpg")
imgui.Image(texture, imgui.ImVec2(texture.width, texture.height))
# ...
# Eventually
glfw.UnloadTexture(texture)
# texture can no longer be used without a call to LoadTexture
```

Image file loading is handled via [stb_image](https://github.com/nothings/stb/blob/master/stb_image.h) and supports various common file formats.
Alternatively, if you wish to do some manual image processing, you can use PILLOW or OpenCV
(or any other image processing library... probably)

**Important Note: `LoadTexture` and `LoadTextureFile` can only be called after both imgui and glfw have been initialized otherwise openGL will segfault**

**OpenCV Example**
```python
import imgui
import cv2

image = cv2.imread("myImage.jpg", cv2.IMREAD_UNCHANGED)
# cv2.IMREAD_UNCHANGED is important for files with alpha

# Have to convert the colors first
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# If your image has alpha: cv2.COLOR_GBRA2RGBA

texture = imgui.LoadTexture(image.tobytes(),
                            image.shape[1],
                            image.shape[0],
                            image.shape[2])

```

**PILLOW Example**
```python
import imgui
from PIL import Image

image = Image.open("myImage.jpg")
texture = imgui.LoadTexture(image.tobytes(),
                            image.size[0],
                            image.size[1],
                            len(image.getbands()))

```

### GLFW API Adjustments

This wrapper aims to be as close to the original API as possible.
Exceptions:
- Functions have lost the `glfw` prefix as this is already in the module name
- Functions that returned pointers to arrays now return list-like objects
- Functions that took pointers to output variables as arguments now return tuples


---

### Build Dependencies

**Debian/apt**
```
libx11-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libgl-dev
```

**Fedora/yum**
```
libXrandr-devel libXinerama-devel libXcursor-devel libXi-devel mesa-libGL-devel
```


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "py-imgui-redux",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": null,
    "author": "Alagyn",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/bd/a7/838ed366e84185ac003d6747bb0e130e71e29ce66fdabccf8973a7a7b2bc/py_imgui_redux-3.0.2.tar.gz",
    "platform": null,
    "description": "<img src=\"https://github.com/alagyn/py-imgui-redux/blob/main/docs/pyimgui-logo-512.png?raw=true\" width=\"256\" align=\"right\"/>\n\n\n# PyImGui\nDearImGui wrapper for python made with PyBind11\n\n---\n\nRead below for adjustments made to the standard APIs.\nOtherwise, all documentation from the original libraries remains 100% valid.\nCheck out the examples folder for some concrete code.\n\n## Install\n\nInstall the latest version with pip\n```\npip install py-imgui-redux\n```\n\n## Modules:\n\n`imgui` - [Core DearImGUI](https://github.com/ocornut/imgui)  \n`imgui.implot` - [ImPlot library](https://github.com/epezent/implot)  \n`imgui.imnodes` - [ImNodes library](https://github.com/Nelarius/imnodes)  \n`imgui.glfw` - [GLFW Bindings](https://www.glfw.org)\n\n\n## Backends:\n\nThis module only uses the GFLW+OpenGL3 backend. `imgui.glfw` provides full access to GLFW's API, see below for it's adjustments\n\n---\n\n## API Adjustments\n\nI am writing this library with the primary goal of keeping the original Dear ImGui functional\nAPI as intact as possible. This is because:\n1. I want to keep all C++ examples and documentation as relevant as possible since I am lazy and don't want to rewrite everything.\n2. I have a love-hate relationship with snake-case.\n\nHowever, there are some minor compromises that have to be made in order to make this happen, primarily in the case of pointers and lists.\n\n### Pointers\n\nTake for instance the function:\n```c++\nbool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, /* other args... */);\n```\n1. This function returns true if the state changed\n2. `v_current_min` and `v_current_max` are pointers to state, and will be read and updated if a change is made\n\nTypical C++ usage\n```c++\nint min = 0;\nint max = 5;\n// Code ...\nif(imgui::DragIntRange2(\"Label\", &min, &max))\n{\n    // Code that happens if a change was made\n}\n```\n\nPython, however, will not let you pass an integer by reference normally, let alone across the C API.\nTherefore, the py-imgui-redux method of accomplishing this:\n```python\nmin_val = imgui.IntRef(0)\nmax_val = imgui.IntRef(5)\n# Code ...\nif imgui.DragIntRange2(\"Label\", min_val, max_val):\n    # Code that happens if a change was made\n    pass\n```\n\nThese are thin wrappers around a single value.\n```python\nimgui.IntRef\nimgui.FloatRef\nimgui.BoolRef\n# The value can be accessed like so\nmyNum = imgui.IntRef(25)\nmyNum.val += 2\n```\n\n---\n\n### Lists\n\nTake for instance the function\n```c++\nbool DragInt3(const char* label, int v[3], /* args ... */);\n```\n\nA standard python list is stored sequentially in memory, but the raw *values* themselves are wrapped in a python object. Therefore, we cannot easily iterate over *just* the ints/floats, let alone get a pointer to give to ImGui. PyBind11 will happily take a python list and turn it into a vector for us, but in doing so requires making a copy of the list (not ideal for large lists)\n\nThis is solved in one of two ways.  \n\nMethod 1: py-imgui-redux Wrappers\n```python\nvals = imgui.IntList([0, 5, 10])\nif imgui.DragInt3(\"Label\", vals):\n    # updating code\n    pass\n```\n\nThese are thin wrappers around a C++ vector. They have standard\npython list access functions and iteration capabilities.\n```python\nimgui.IntList\nimgui.FloatList\nimgui.DoubleList\n\nx = imgui.IntList()\nx.append(25)\nx.append(36)\n\nprint(len(x))\n\nfor val in x:\n    print(x)\n\nx[0] = 12\n\n```\nSee their docs for more information and all functions.\n  \nFunctions that mutate the data, such as vanilla ImGui widgets will\nuse this method. \n\nMethod 2: Numpy Arrays\n```python\nimport numpy as np\nxs = np.array([0, 5, 10])\nys = np.array([0, 5, 10])\n# Code...\nimplot.PlotScatter(\"Scatter\", xs, ys, len(xs))\n```\nThe implot submodule uses these, as they prevent the need to copy potentially large arrays, and implot functions will not need to change the data as it reads it. Numpy\nis also easier to use for data manipulations as is typical with plotting.\n\n---\nThirdly, references to strings are handled similarily to lists (it's actually a subclass of the List wrappers).\n\nTake for instance the function\n```c++\nbool InputText(const char* label, char* buf, size_t buf_size, /* args ... */);\n```\nWhich takes a pointer to the IO buffer, and also and argument for its size.\n\nIn Python:\n```python\nmyStr = imgui.StrRef(\"This is a string\", maxSize=20)\n# Code ...\nif imgui.InputText(\"Label\", myStr):\n    # code if the text changes\n    pass\n```\nNotice that you don't need to pass the size, this is baked into the StrRef.\nNote: `maxSize` automatically takes into account string terminators, i.e. `maxSize=20` means\nyour string can hold 20 chars.\n\nTo change the maxSize:\n```python\nmyStr.resize(25)\n```\nChanging the size lower will drop any extra chars.\n\nTo get your string back\n```python\n# make a copy\nx = str(myStr)\n# or\nx = myStr.copy()\n\n# get a temporary/unsafe pointer\n# useful for printing large strings without copying\n# only use said pointer while the object exists\n# lest ye summon the dreaded seg-fault\nprint(myStr.view())\n```\n\n---\n\n### Images\n\nLoading images for rendering is simple\n```python\nimport imgui\n\ntexture = imgui.LoadTextureFile(\"myImage.jpg\")\nimgui.Image(texture, imgui.ImVec2(texture.width, texture.height))\n# ...\n# Eventually\nglfw.UnloadTexture(texture)\n# texture can no longer be used without a call to LoadTexture\n```\n\nImage file loading is handled via [stb_image](https://github.com/nothings/stb/blob/master/stb_image.h) and supports various common file formats.\nAlternatively, if you wish to do some manual image processing, you can use PILLOW or OpenCV\n(or any other image processing library... probably)\n\n**Important Note: `LoadTexture` and `LoadTextureFile` can only be called after both imgui and glfw have been initialized otherwise openGL will segfault**\n\n**OpenCV Example**\n```python\nimport imgui\nimport cv2\n\nimage = cv2.imread(\"myImage.jpg\", cv2.IMREAD_UNCHANGED)\n# cv2.IMREAD_UNCHANGED is important for files with alpha\n\n# Have to convert the colors first\nimage = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n# If your image has alpha: cv2.COLOR_GBRA2RGBA\n\ntexture = imgui.LoadTexture(image.tobytes(),\n                            image.shape[1],\n                            image.shape[0],\n                            image.shape[2])\n\n```\n\n**PILLOW Example**\n```python\nimport imgui\nfrom PIL import Image\n\nimage = Image.open(\"myImage.jpg\")\ntexture = imgui.LoadTexture(image.tobytes(),\n                            image.size[0],\n                            image.size[1],\n                            len(image.getbands()))\n\n```\n\n### GLFW API Adjustments\n\nThis wrapper aims to be as close to the original API as possible.\nExceptions:\n- Functions have lost the `glfw` prefix as this is already in the module name\n- Functions that returned pointers to arrays now return list-like objects\n- Functions that took pointers to output variables as arguments now return tuples\n\n\n---\n\n### Build Dependencies\n\n**Debian/apt**\n```\nlibx11-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libgl-dev\n```\n\n**Fedora/yum**\n```\nlibXrandr-devel libXinerama-devel libXcursor-devel libXi-devel mesa-libGL-devel\n```\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A python wrapper for DearImGUI and popular extensions",
    "version": "3.0.2",
    "project_urls": {
        "Bug Tracker": "https://github.com/alagyn/py-imgui-redux/issues",
        "Homepage": "https://github.com/alagyn/py-imgui-redux"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "752ea2c431ac44b537591975b683f53d894bb140da076e4e5d8d5f1b328f133c",
                "md5": "84e674b2b54a3339572dfbb75c4925a0",
                "sha256": "0159ad67bc3579e786bb4090cd294681cb6f1833472b1acc7af48b4d10c99904"
            },
            "downloads": -1,
            "filename": "py_imgui_redux-3.0.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "84e674b2b54a3339572dfbb75c4925a0",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 1913780,
            "upload_time": "2024-06-09T05:05:53",
            "upload_time_iso_8601": "2024-06-09T05:05:53.696437Z",
            "url": "https://files.pythonhosted.org/packages/75/2e/a2c431ac44b537591975b683f53d894bb140da076e4e5d8d5f1b328f133c/py_imgui_redux-3.0.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3b11b604e5c08b374790df36671a8d98001ae857309ab6aa62f254495c11140d",
                "md5": "ebc9e976f877b8f646b11b662b78b452",
                "sha256": "6128bfb1c8f10918d63bb3e2df847b43fdc4cc59b0eec7811ddbba59006bc42c"
            },
            "downloads": -1,
            "filename": "py_imgui_redux-3.0.2-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "ebc9e976f877b8f646b11b662b78b452",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 1142600,
            "upload_time": "2024-06-09T05:05:55",
            "upload_time_iso_8601": "2024-06-09T05:05:55.837014Z",
            "url": "https://files.pythonhosted.org/packages/3b/11/b604e5c08b374790df36671a8d98001ae857309ab6aa62f254495c11140d/py_imgui_redux-3.0.2-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b94fd4215f7f26f90eaa9e4a4c273d03cbde9227c76d7c7371fda177ac95f874",
                "md5": "46e9bd12f3ef649bd89f0a96241b5076",
                "sha256": "b6c8c53bfcf0614756d6387d7b777e0384e66064288788fd19056e176b406c52"
            },
            "downloads": -1,
            "filename": "py_imgui_redux-3.0.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "46e9bd12f3ef649bd89f0a96241b5076",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 1913496,
            "upload_time": "2024-06-09T05:05:57",
            "upload_time_iso_8601": "2024-06-09T05:05:57.943875Z",
            "url": "https://files.pythonhosted.org/packages/b9/4f/d4215f7f26f90eaa9e4a4c273d03cbde9227c76d7c7371fda177ac95f874/py_imgui_redux-3.0.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5656b3301bc5d4c06b087d2ba148f8b3a4f80d044b83db0abb9f824915b2474d",
                "md5": "f96ba36671d5b5d3e39dbfbd158ac524",
                "sha256": "2d1518ef1af9ae14e08a28e8ca01700768bfebe4acb413b9b4c4acd9d6cac6b2"
            },
            "downloads": -1,
            "filename": "py_imgui_redux-3.0.2-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "f96ba36671d5b5d3e39dbfbd158ac524",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 1142830,
            "upload_time": "2024-06-09T05:05:59",
            "upload_time_iso_8601": "2024-06-09T05:05:59.736670Z",
            "url": "https://files.pythonhosted.org/packages/56/56/b3301bc5d4c06b087d2ba148f8b3a4f80d044b83db0abb9f824915b2474d/py_imgui_redux-3.0.2-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "11d96b5f3b86ba6bbb9fc07976932df9f9047249f900f7b6dd37b13d9d78c58f",
                "md5": "2f81bd397e4ecc198af11d8e813b6c62",
                "sha256": "63ac416bf6aeeacc6559b34a236ff91b69d082698187e3796dbdbbdbcfc7a032"
            },
            "downloads": -1,
            "filename": "py_imgui_redux-3.0.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2f81bd397e4ecc198af11d8e813b6c62",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 1907246,
            "upload_time": "2024-06-09T05:06:01",
            "upload_time_iso_8601": "2024-06-09T05:06:01.829658Z",
            "url": "https://files.pythonhosted.org/packages/11/d9/6b5f3b86ba6bbb9fc07976932df9f9047249f900f7b6dd37b13d9d78c58f/py_imgui_redux-3.0.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "03f818598f0253a33ed8e27b73296bfe992fea4d0b76b18d8cb6f8c7f0ea9036",
                "md5": "e7a6f2ef9d5bb6ec82fb7c67a76891c5",
                "sha256": "099ab0c7dcf05e90e9a52d112227905bb005d2b10bd1e8ee42256b8385798aca"
            },
            "downloads": -1,
            "filename": "py_imgui_redux-3.0.2-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "e7a6f2ef9d5bb6ec82fb7c67a76891c5",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.7",
            "size": 1129036,
            "upload_time": "2024-06-09T05:06:03",
            "upload_time_iso_8601": "2024-06-09T05:06:03.819719Z",
            "url": "https://files.pythonhosted.org/packages/03/f8/18598f0253a33ed8e27b73296bfe992fea4d0b76b18d8cb6f8c7f0ea9036/py_imgui_redux-3.0.2-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "241e85beb2be6e956683099e740f433e5fd5323991c40e568bce668222cdc304",
                "md5": "d22c95695b8f152b461e1cee66258016",
                "sha256": "fa870214cc4378baa4af474b7a4a90ddc7f58203f5cd0a9f5a8922b0b96b2581"
            },
            "downloads": -1,
            "filename": "py_imgui_redux-3.0.2-cp37-cp37m-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d22c95695b8f152b461e1cee66258016",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 1938066,
            "upload_time": "2024-06-09T05:06:06",
            "upload_time_iso_8601": "2024-06-09T05:06:06.764053Z",
            "url": "https://files.pythonhosted.org/packages/24/1e/85beb2be6e956683099e740f433e5fd5323991c40e568bce668222cdc304/py_imgui_redux-3.0.2-cp37-cp37m-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "760f9f5d1f0f6540fbc443ac5e2468db809bbd486b94d88200f7098cdb0f8f1a",
                "md5": "ad2225805730a8bee0b4eb51124fd1d4",
                "sha256": "33359db6b55943c4b89fc1359a57fdb2569681a624dd57f995c15ff0b542df04"
            },
            "downloads": -1,
            "filename": "py_imgui_redux-3.0.2-cp37-cp37m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "ad2225805730a8bee0b4eb51124fd1d4",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 1121182,
            "upload_time": "2024-06-09T05:06:08",
            "upload_time_iso_8601": "2024-06-09T05:06:08.741231Z",
            "url": "https://files.pythonhosted.org/packages/76/0f/9f5d1f0f6540fbc443ac5e2468db809bbd486b94d88200f7098cdb0f8f1a/py_imgui_redux-3.0.2-cp37-cp37m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "686d926a87b38cbffd360c8c6d4bd04dfe564b60905d58e1c2f71b6c6881cb8d",
                "md5": "3f1c90be8d14abe55c2e99a4b7f209ca",
                "sha256": "ba8e96fa69f1760ccf3c39501d341de08ce728c39b8af1d4fa618034966e418b"
            },
            "downloads": -1,
            "filename": "py_imgui_redux-3.0.2-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3f1c90be8d14abe55c2e99a4b7f209ca",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 1912495,
            "upload_time": "2024-06-09T05:06:10",
            "upload_time_iso_8601": "2024-06-09T05:06:10.851851Z",
            "url": "https://files.pythonhosted.org/packages/68/6d/926a87b38cbffd360c8c6d4bd04dfe564b60905d58e1c2f71b6c6881cb8d/py_imgui_redux-3.0.2-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4b140022ec10367b062671ab29d46a202d2391a5b5f285df1067df8998de9d52",
                "md5": "3dfc6ad5a54938abe9d2317ade30c31d",
                "sha256": "16a7273a1f4afae191af9eab8b88a4e92fea081e13e6a29067766ca51bb0d4a1"
            },
            "downloads": -1,
            "filename": "py_imgui_redux-3.0.2-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "3dfc6ad5a54938abe9d2317ade30c31d",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 1142580,
            "upload_time": "2024-06-09T05:06:12",
            "upload_time_iso_8601": "2024-06-09T05:06:12.833090Z",
            "url": "https://files.pythonhosted.org/packages/4b/14/0022ec10367b062671ab29d46a202d2391a5b5f285df1067df8998de9d52/py_imgui_redux-3.0.2-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7db4d0e682a947fa231e49fcc841b896716b2513d9ef5717e91569a9194c8ba2",
                "md5": "0b713e44df398fa761b97de1798ef537",
                "sha256": "7f58eab99a0966f410609d5a5d6ceacdba0535da36fe9bccd7bced2b897497eb"
            },
            "downloads": -1,
            "filename": "py_imgui_redux-3.0.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0b713e44df398fa761b97de1798ef537",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 1913566,
            "upload_time": "2024-06-09T05:06:14",
            "upload_time_iso_8601": "2024-06-09T05:06:14.532494Z",
            "url": "https://files.pythonhosted.org/packages/7d/b4/d0e682a947fa231e49fcc841b896716b2513d9ef5717e91569a9194c8ba2/py_imgui_redux-3.0.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7d8d9f1498cbf4ec98cb02d37ecfd7c22b51aed7b872dd27ef1d8d58ec9c3bec",
                "md5": "495c09f34d1e099c7d2693a3e971ddd9",
                "sha256": "241d05c9776887d225a7c7db781d1c090e07b06a94b187c08fad4044f9c125ec"
            },
            "downloads": -1,
            "filename": "py_imgui_redux-3.0.2-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "495c09f34d1e099c7d2693a3e971ddd9",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 1142761,
            "upload_time": "2024-06-09T05:06:16",
            "upload_time_iso_8601": "2024-06-09T05:06:16.106455Z",
            "url": "https://files.pythonhosted.org/packages/7d/8d/9f1498cbf4ec98cb02d37ecfd7c22b51aed7b872dd27ef1d8d58ec9c3bec/py_imgui_redux-3.0.2-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bda7838ed366e84185ac003d6747bb0e130e71e29ce66fdabccf8973a7a7b2bc",
                "md5": "3800a7f41731f1ad9337c9360274d46d",
                "sha256": "351718e3a403fdd4b50452b766a390431a213188508714817a742febac856f3b"
            },
            "downloads": -1,
            "filename": "py_imgui_redux-3.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "3800a7f41731f1ad9337c9360274d46d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 3759371,
            "upload_time": "2024-06-09T05:06:18",
            "upload_time_iso_8601": "2024-06-09T05:06:18.242343Z",
            "url": "https://files.pythonhosted.org/packages/bd/a7/838ed366e84185ac003d6747bb0e130e71e29ce66fdabccf8973a7a7b2bc/py_imgui_redux-3.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-06-09 05:06:18",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "alagyn",
    "github_project": "py-imgui-redux",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "build",
            "specs": []
        },
        {
            "name": "setuptools",
            "specs": []
        },
        {
            "name": "wheel",
            "specs": []
        },
        {
            "name": "twine",
            "specs": []
        },
        {
            "name": "tomli",
            "specs": []
        }
    ],
    "lcname": "py-imgui-redux"
}
        
Elapsed time: 0.34562s