tkinter-form


Nametkinter-form JSON
Version 0.1.5.1 PyPI version JSON
download
home_pagehttps://github.com/JohanEstebanCuervo/tkinter_form
Summaryform for tkinter
upload_time2023-04-23 07:00:30
maintainer
docs_urlNone
authorJohanEstebanCuervo
requires_python
licenseMIT
keywords tkinter form form tkinter tkinter interface simple tkinter tkform tk form
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
# tkinter_form



tk_form is a simple module that helps you to create forms in tkinter easily and quickly from a base dictionary, saving certain repetitive tasks in the creation of a form and adding the verification of integer and float variables. In simple words it is similar to having a tkinter variable. Its value is a dictionary.



## Install



```bash

pip install tkinter_form

```



## Tutorial



### Fast Example



```python

import tkinter as tk

from tkinter_form import Form



class App(tk.Tk):

    def __init__(self) -> None:

        super().__init__()

        estruct = {

            "high": 1.0,

            "width": 1.0,

            "round": False,

            "type of calculation": ["calculate area", "calculate perimeter"],

            "result": "",

        }

        self.form = Form(

            self,

            name_form="calculations of a rectangle",

            form_dict=estruct,

            name_config="calculate",

            button=True

        )

        self.form.pack()

        self.button = self.form.button



        self.button.config(command=self.calculate)

        self.mainloop()

    def calculate(self):

        """

        Calculate values rectangle

        """

        dict_vals = self.form.get()

        if dict_vals["type of calculation"] == "calculate area":

            value = dict_vals["high"] * dict_vals["width"]

        elif dict_vals["type of calculation"] == "calculate perimeter":

            value = 2 * dict_vals["high"] + 2 * dict_vals["width"]

        else:

            value = 0

        if dict_vals["round"]:

            value = round(value)

        result = {"result": str(value)}

        self.form.set(result)

if __name__ == "__main__":

    App()

```



With these lines we create the interface that performs the calculations of area and perimeter of a rectangle. This frees us the declaration of the labels and other objects returning a ttk.LabelFrame with the additional methods set(), get() and the attributes widgets and button.



![example](src/example.png)



## API Reference



### tkinter_form.Form



```python

tkinter_form.Form(self,master: object, name_form: str, form_dict: dict, name_config: str = "configure", button: bool = True)

```



Form object is a `ttk.LabelFrame`. With additional attributes: [`self.widgets`](#tkinter_formformwidgets), [`self.button`](#tkinter_formformbutton), [`self.get()`](#tkinter_formformget), [`self.set() `](#tkinter_formformset), [`self.set_labels_text() `](#tkinter_formformset_labels_text).



Parameters:



master : tk.Tk or object tk.parent

    tkinter container or parent object



name_form : str

    string with edit`ttk.LabelFrame['text']



form_dict : dict[str:float|int|str|bool|list]

    base structure of the form that contains the initial values of the form.[Struct Form](#struct-form)





name_config: str

    name of the form button in case the argument`button` is `True` button : bool Create a button on the form by default 



Attributes:



[`button`](#tkinter_formformbutton) : ttk.Button | None

    if the button is create in the form.



[`widgets`](#tkinter_formformwidgets) : dict[str:[ttk.Label,ttk.Entry|ttk.CheckButton|ttk.ComboBox] | tkinter_form.Form]

dictionary that contains the widgets of the form with the same structure of the dictionary that was built. returning a list with two objects a tk.Label and a tk object according to the data type.



[ttk.LabelFrame Atributes](https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/ttk-LabelFrame.html)



Methods:



[`get()`](#tkinter_formformget): Return Dict

    Returns a dictionary with the same structure that was created which contains the values entered in the form



[`set(set_dict)`](#tkinter_formformset) : Return None

    set_dict: dict



dictionary with keys value of the base dictionary with values to set in the form



[`set_labels_text(set_labels)`](#tkinter_formformset_labels_text) : Return None

    set_labels: dict



dictionary with keys value of the base dictionary with values to set labels text in the form.



[ttk.LabelFrame Methods](https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/ttk-LabelFrame.html)



#### tkinter_form.Form.button



is a ttk.buttom or None if the form button was not created



#### tkinter_form.Form.widgets



dictionary that contains the widgets of the form with the same structure of the dictionary that was built. returning a list with two objects a tk.Label and a tk object according to the data type.



##### Example



in [Fast Example](#fast-example) the widget attibute return:



```python

{

    "high": [ttk.Label, ttk.Entry],

    "width": [ttk.Label, ttk.Entry],

    "round": [ttk.Label, ttk.CheckButtom],

    "type of calculation": [ttk.Label, ttk.ComboBox],

    "result": [ttk.Label, ttk.Entry],

}

```



If in [Fast Example](#fast-example) we want the ttk.Entry result to be read-only we could:



```python

class App(tk.Tk):

    def __init__(self) -> None:

        :::

        entry = self.form.widgets["result"][1]

        entry.config(state='readonly')

```



If the structure of the form contains subdictionaries in said key, a Form will be assigned.



Estruct example:



```python

{   

    "measures":{

        "high": 1.0,

        "width": 1.0

    },

    "round": False,

    "type of calculation": ["calculate area", "calculate perimeter"],

    "result": "",

}

```



    the`widget` attribute would be



```python

{   

    "measures":tkinter_form.Form,

    "round": [ttk.Label, ttk.CheckButtom],

    "type of calculation": [ttk.Label, ttk.ComboBox],

    "result": [ttk.Label, ttk.Entry],

}

```



#### tkinter_form.Form.get()



Arguments:



Return:

    None

Returns a dictionary with the same structure that was created which contains the values entered in the form.



##### Example



    in [Fast Example](#fast-example) the get() function return:



```python

{

    "high": 3.7,

    "width": 5,

    "round": True,

    "type of calculation": "calculate perimeter",

    "result": "17",

}

```



    if struct Form Contain Subdictionaries



Estruct example:



```python

{   

    "measures":{

        "high": 1.0,

        "width": 1.0

    },

    "round": False,

    "type of calculation": ["calculate area", "calculate perimeter"],

    "result": "",

}

```



    the`get()` function return por example



```python

{   

    "measures":{

        "high": 3.7,

        "width": 5

    },

    "round": True,

    "type of calculation": "calculate perimeter",

    "result": "17",

}

```



#### tkinter_form.Form.set()



Arguments:

    set_dict : dict



Return:

    None



dictionary with keys value of the base dictionary with values to set in the form



##### Example



    in [Fast Example](#fast-example) the set() function in line 39-40:



```python

        result = {"result": str(value)}

        self.form.set(result)

```



#### tkinter_form.Form.set_labes_text()



Arguments:

    set_dict : dict



Return:

    None



dictionary with keys value of the base dictionary with values to set in the form



##### Example



    in [Fast Example](#fast-example) the set_labes_text():



```python

        rename_labels = {

            "__form__": "Calculos Rectangulo",

            "measures": {

                "__form__": "medidas",

                "width": "ancho",

                "high": "alto",

            },

            "round": "redondear",

            "type of calculation": "tipo de calculo",

            "result": "resultado",

        }

        self.form.set_labels_text(rename_labels)

```

Result:

![rename_labes](src/rename_labels_example1.PNG)

## Struct Form



The form structure is based on a base dictionary. with some initial values that will be displayed in the interface and that determine the type of data that the entry accepts. This means that if the value in the base dictionary is an integer, the entry will only allow the entry of integer values.



- dictionary keys are recommended to be strings but not required. But care must be taken. The Form.widgets will have as keys the same values entered in the base structure.



- The comboboxes are generated by means of lists, these cannot be empty since their initial value is the first index of the list.



### Examples Structs - Result



1. example 1



```python

estruct = {

    "high": float(),

    "width": float(),

    "round": bool(),

    "type of calculation": ["val 1", "val 2"],

    "result": str(),

}

```



![Example 1](src/struct_example1.PNG)



2. example 2



```python

estruct = {

    "measurements":{

    "high": 5.0,

    "width": float()

    },

    "round": bool(),

    "type of calculation": ["val 1", "val 2"],

    "result": str(),

}

```



![Example 1](src/struct_example2.PNG)



3. example 2



```python

estruct = {

    "Company:": "company.SAS",

    "Fisrt Name:": "Job",

    "Last Name:": "Job",

    "Email Address:": "company.SAS",

    "Title:": "",

    "Phone:": int(),

    "Cancel Registration:": True,

    "Job Function:":["Campaing Management", "CRM Administration", "Partner", "Employee"],

    "Dietary Requirements:":str()

}

```



![Example 1](src/struct_example3.PNG)



## Bugs



1. get() function on integer values returns the value difenter if in the Entry the value starts with zero.

   Example:



```python

estruct = {"value": int()}

```



![Bug Example](src/bug_example.PNG)



return get()



```python

{'value': 55}

```


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/JohanEstebanCuervo/tkinter_form",
    "name": "tkinter-form",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "tkinter,form,form tkinter,tkinter interface,simple tkinter,tkform,tk form",
    "author": "JohanEstebanCuervo",
    "author_email": "<jecuervoch@unal.edu.co>",
    "download_url": "https://files.pythonhosted.org/packages/a1/ab/4389a61e8e47da083f0b7b3a12acffc1f08ca73d791888dda9b8b19188b2/tkinter_form-0.1.5.1.tar.gz",
    "platform": null,
    "description": "\r\n# tkinter_form\r\n\r\n\r\n\r\ntk_form is a simple module that helps you to create forms in tkinter easily and quickly from a base dictionary, saving certain repetitive tasks in the creation of a form and adding the verification of integer and float variables. In simple words it is similar to having a tkinter variable. Its value is a dictionary.\r\n\r\n\r\n\r\n## Install\r\n\r\n\r\n\r\n```bash\r\n\r\npip install tkinter_form\r\n\r\n```\r\n\r\n\r\n\r\n## Tutorial\r\n\r\n\r\n\r\n### Fast Example\r\n\r\n\r\n\r\n```python\r\n\r\nimport tkinter as tk\r\n\r\nfrom tkinter_form import Form\r\n\r\n\r\n\r\nclass App(tk.Tk):\r\n\r\n    def __init__(self) -> None:\r\n\r\n        super().__init__()\r\n\r\n        estruct = {\r\n\r\n            \"high\": 1.0,\r\n\r\n            \"width\": 1.0,\r\n\r\n            \"round\": False,\r\n\r\n            \"type of calculation\": [\"calculate area\", \"calculate perimeter\"],\r\n\r\n            \"result\": \"\",\r\n\r\n        }\r\n\r\n        self.form = Form(\r\n\r\n            self,\r\n\r\n            name_form=\"calculations of a rectangle\",\r\n\r\n            form_dict=estruct,\r\n\r\n            name_config=\"calculate\",\r\n\r\n            button=True\r\n\r\n        )\r\n\r\n        self.form.pack()\r\n\r\n        self.button = self.form.button\r\n\r\n\r\n\r\n        self.button.config(command=self.calculate)\r\n\r\n        self.mainloop()\r\n\r\n    def calculate(self):\r\n\r\n        \"\"\"\r\n\r\n        Calculate values rectangle\r\n\r\n        \"\"\"\r\n\r\n        dict_vals = self.form.get()\r\n\r\n        if dict_vals[\"type of calculation\"] == \"calculate area\":\r\n\r\n            value = dict_vals[\"high\"] * dict_vals[\"width\"]\r\n\r\n        elif dict_vals[\"type of calculation\"] == \"calculate perimeter\":\r\n\r\n            value = 2 * dict_vals[\"high\"] + 2 * dict_vals[\"width\"]\r\n\r\n        else:\r\n\r\n            value = 0\r\n\r\n        if dict_vals[\"round\"]:\r\n\r\n            value = round(value)\r\n\r\n        result = {\"result\": str(value)}\r\n\r\n        self.form.set(result)\r\n\r\nif __name__ == \"__main__\":\r\n\r\n    App()\r\n\r\n```\r\n\r\n\r\n\r\nWith these lines we create the interface that performs the calculations of area and perimeter of a rectangle. This frees us the declaration of the labels and other objects returning a ttk.LabelFrame with the additional methods set(), get() and the attributes widgets and button.\r\n\r\n\r\n\r\n![example](src/example.png)\r\n\r\n\r\n\r\n## API Reference\r\n\r\n\r\n\r\n### tkinter_form.Form\r\n\r\n\r\n\r\n```python\r\n\r\ntkinter_form.Form(self,master: object, name_form: str, form_dict: dict, name_config: str = \"configure\", button: bool = True)\r\n\r\n```\r\n\r\n\r\n\r\nForm object is a `ttk.LabelFrame`. With additional attributes: [`self.widgets`](#tkinter_formformwidgets), [`self.button`](#tkinter_formformbutton), [`self.get()`](#tkinter_formformget), [`self.set() `](#tkinter_formformset), [`self.set_labels_text() `](#tkinter_formformset_labels_text).\r\n\r\n\r\n\r\nParameters:\r\n\r\n\r\n\r\nmaster : tk.Tk or object tk.parent\r\n\r\n    tkinter container or parent object\r\n\r\n\r\n\r\nname_form : str\r\n\r\n    string with edit`ttk.LabelFrame['text']\r\n\r\n\r\n\r\nform_dict : dict[str:float|int|str|bool|list]\r\n\r\n    base structure of the form that contains the initial values of the form.[Struct Form](#struct-form)\r\n\r\n\r\n\r\n\r\n\r\nname_config: str\r\n\r\n    name of the form button in case the argument`button` is `True` button : bool Create a button on the form by default \r\n\r\n\r\n\r\nAttributes:\r\n\r\n\r\n\r\n[`button`](#tkinter_formformbutton) : ttk.Button | None\r\n\r\n    if the button is create in the form.\r\n\r\n\r\n\r\n[`widgets`](#tkinter_formformwidgets) : dict[str:[ttk.Label,ttk.Entry|ttk.CheckButton|ttk.ComboBox] | tkinter_form.Form]\r\n\r\ndictionary that contains the widgets of the form with the same structure of the dictionary that was built. returning a list with two objects a tk.Label and a tk object according to the data type.\r\n\r\n\r\n\r\n[ttk.LabelFrame Atributes](https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/ttk-LabelFrame.html)\r\n\r\n\r\n\r\nMethods:\r\n\r\n\r\n\r\n[`get()`](#tkinter_formformget): Return Dict\r\n\r\n    Returns a dictionary with the same structure that was created which contains the values entered in the form\r\n\r\n\r\n\r\n[`set(set_dict)`](#tkinter_formformset) : Return None\r\n\r\n    set_dict: dict\r\n\r\n\r\n\r\ndictionary with keys value of the base dictionary with values to set in the form\r\n\r\n\r\n\r\n[`set_labels_text(set_labels)`](#tkinter_formformset_labels_text) : Return None\r\n\r\n    set_labels: dict\r\n\r\n\r\n\r\ndictionary with keys value of the base dictionary with values to set labels text in the form.\r\n\r\n\r\n\r\n[ttk.LabelFrame Methods](https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/ttk-LabelFrame.html)\r\n\r\n\r\n\r\n#### tkinter_form.Form.button\r\n\r\n\r\n\r\nis a ttk.buttom or None if the form button was not created\r\n\r\n\r\n\r\n#### tkinter_form.Form.widgets\r\n\r\n\r\n\r\ndictionary that contains the widgets of the form with the same structure of the dictionary that was built. returning a list with two objects a tk.Label and a tk object according to the data type.\r\n\r\n\r\n\r\n##### Example\r\n\r\n\r\n\r\nin [Fast Example](#fast-example) the widget attibute return:\r\n\r\n\r\n\r\n```python\r\n\r\n{\r\n\r\n    \"high\": [ttk.Label, ttk.Entry],\r\n\r\n    \"width\": [ttk.Label, ttk.Entry],\r\n\r\n    \"round\": [ttk.Label, ttk.CheckButtom],\r\n\r\n    \"type of calculation\": [ttk.Label, ttk.ComboBox],\r\n\r\n    \"result\": [ttk.Label, ttk.Entry],\r\n\r\n}\r\n\r\n```\r\n\r\n\r\n\r\nIf in [Fast Example](#fast-example) we want the ttk.Entry result to be read-only we could:\r\n\r\n\r\n\r\n```python\r\n\r\nclass App(tk.Tk):\r\n\r\n    def __init__(self) -> None:\r\n\r\n        :::\r\n\r\n        entry = self.form.widgets[\"result\"][1]\r\n\r\n        entry.config(state='readonly')\r\n\r\n```\r\n\r\n\r\n\r\nIf the structure of the form contains subdictionaries in said key, a Form will be assigned.\r\n\r\n\r\n\r\nEstruct example:\r\n\r\n\r\n\r\n```python\r\n\r\n{   \r\n\r\n    \"measures\":{\r\n\r\n        \"high\": 1.0,\r\n\r\n        \"width\": 1.0\r\n\r\n    },\r\n\r\n    \"round\": False,\r\n\r\n    \"type of calculation\": [\"calculate area\", \"calculate perimeter\"],\r\n\r\n    \"result\": \"\",\r\n\r\n}\r\n\r\n```\r\n\r\n\r\n\r\n    the`widget` attribute would be\r\n\r\n\r\n\r\n```python\r\n\r\n{   \r\n\r\n    \"measures\":tkinter_form.Form,\r\n\r\n    \"round\": [ttk.Label, ttk.CheckButtom],\r\n\r\n    \"type of calculation\": [ttk.Label, ttk.ComboBox],\r\n\r\n    \"result\": [ttk.Label, ttk.Entry],\r\n\r\n}\r\n\r\n```\r\n\r\n\r\n\r\n#### tkinter_form.Form.get()\r\n\r\n\r\n\r\nArguments:\r\n\r\n\r\n\r\nReturn:\r\n\r\n    None\r\n\r\nReturns a dictionary with the same structure that was created which contains the values entered in the form.\r\n\r\n\r\n\r\n##### Example\r\n\r\n\r\n\r\n    in [Fast Example](#fast-example) the get() function return:\r\n\r\n\r\n\r\n```python\r\n\r\n{\r\n\r\n    \"high\": 3.7,\r\n\r\n    \"width\": 5,\r\n\r\n    \"round\": True,\r\n\r\n    \"type of calculation\": \"calculate perimeter\",\r\n\r\n    \"result\": \"17\",\r\n\r\n}\r\n\r\n```\r\n\r\n\r\n\r\n    if struct Form Contain Subdictionaries\r\n\r\n\r\n\r\nEstruct example:\r\n\r\n\r\n\r\n```python\r\n\r\n{   \r\n\r\n    \"measures\":{\r\n\r\n        \"high\": 1.0,\r\n\r\n        \"width\": 1.0\r\n\r\n    },\r\n\r\n    \"round\": False,\r\n\r\n    \"type of calculation\": [\"calculate area\", \"calculate perimeter\"],\r\n\r\n    \"result\": \"\",\r\n\r\n}\r\n\r\n```\r\n\r\n\r\n\r\n    the`get()` function return por example\r\n\r\n\r\n\r\n```python\r\n\r\n{   \r\n\r\n    \"measures\":{\r\n\r\n        \"high\": 3.7,\r\n\r\n        \"width\": 5\r\n\r\n    },\r\n\r\n    \"round\": True,\r\n\r\n    \"type of calculation\": \"calculate perimeter\",\r\n\r\n    \"result\": \"17\",\r\n\r\n}\r\n\r\n```\r\n\r\n\r\n\r\n#### tkinter_form.Form.set()\r\n\r\n\r\n\r\nArguments:\r\n\r\n    set_dict : dict\r\n\r\n\r\n\r\nReturn:\r\n\r\n    None\r\n\r\n\r\n\r\ndictionary with keys value of the base dictionary with values to set in the form\r\n\r\n\r\n\r\n##### Example\r\n\r\n\r\n\r\n    in [Fast Example](#fast-example) the set() function in line 39-40:\r\n\r\n\r\n\r\n```python\r\n\r\n        result = {\"result\": str(value)}\r\n\r\n        self.form.set(result)\r\n\r\n```\r\n\r\n\r\n\r\n#### tkinter_form.Form.set_labes_text()\r\n\r\n\r\n\r\nArguments:\r\n\r\n    set_dict : dict\r\n\r\n\r\n\r\nReturn:\r\n\r\n    None\r\n\r\n\r\n\r\ndictionary with keys value of the base dictionary with values to set in the form\r\n\r\n\r\n\r\n##### Example\r\n\r\n\r\n\r\n    in [Fast Example](#fast-example) the set_labes_text():\r\n\r\n\r\n\r\n```python\r\n\r\n        rename_labels = {\r\n\r\n            \"__form__\": \"Calculos Rectangulo\",\r\n\r\n            \"measures\": {\r\n\r\n                \"__form__\": \"medidas\",\r\n\r\n                \"width\": \"ancho\",\r\n\r\n                \"high\": \"alto\",\r\n\r\n            },\r\n\r\n            \"round\": \"redondear\",\r\n\r\n            \"type of calculation\": \"tipo de calculo\",\r\n\r\n            \"result\": \"resultado\",\r\n\r\n        }\r\n\r\n        self.form.set_labels_text(rename_labels)\r\n\r\n```\r\n\r\nResult:\r\n\r\n![rename_labes](src/rename_labels_example1.PNG)\r\n\r\n## Struct Form\r\n\r\n\r\n\r\nThe form structure is based on a base dictionary. with some initial values that will be displayed in the interface and that determine the type of data that the entry accepts. This means that if the value in the base dictionary is an integer, the entry will only allow the entry of integer values.\r\n\r\n\r\n\r\n- dictionary keys are recommended to be strings but not required. But care must be taken. The Form.widgets will have as keys the same values entered in the base structure.\r\n\r\n\r\n\r\n- The comboboxes are generated by means of lists, these cannot be empty since their initial value is the first index of the list.\r\n\r\n\r\n\r\n### Examples Structs - Result\r\n\r\n\r\n\r\n1. example 1\r\n\r\n\r\n\r\n```python\r\n\r\nestruct = {\r\n\r\n    \"high\": float(),\r\n\r\n    \"width\": float(),\r\n\r\n    \"round\": bool(),\r\n\r\n    \"type of calculation\": [\"val 1\", \"val 2\"],\r\n\r\n    \"result\": str(),\r\n\r\n}\r\n\r\n```\r\n\r\n\r\n\r\n![Example 1](src/struct_example1.PNG)\r\n\r\n\r\n\r\n2. example 2\r\n\r\n\r\n\r\n```python\r\n\r\nestruct = {\r\n\r\n    \"measurements\":{\r\n\r\n    \"high\": 5.0,\r\n\r\n    \"width\": float()\r\n\r\n    },\r\n\r\n    \"round\": bool(),\r\n\r\n    \"type of calculation\": [\"val 1\", \"val 2\"],\r\n\r\n    \"result\": str(),\r\n\r\n}\r\n\r\n```\r\n\r\n\r\n\r\n![Example 1](src/struct_example2.PNG)\r\n\r\n\r\n\r\n3. example 2\r\n\r\n\r\n\r\n```python\r\n\r\nestruct = {\r\n\r\n    \"Company:\": \"company.SAS\",\r\n\r\n    \"Fisrt Name:\": \"Job\",\r\n\r\n    \"Last Name:\": \"Job\",\r\n\r\n    \"Email Address:\": \"company.SAS\",\r\n\r\n    \"Title:\": \"\",\r\n\r\n    \"Phone:\": int(),\r\n\r\n    \"Cancel Registration:\": True,\r\n\r\n    \"Job Function:\":[\"Campaing Management\", \"CRM Administration\", \"Partner\", \"Employee\"],\r\n\r\n    \"Dietary Requirements:\":str()\r\n\r\n}\r\n\r\n```\r\n\r\n\r\n\r\n![Example 1](src/struct_example3.PNG)\r\n\r\n\r\n\r\n## Bugs\r\n\r\n\r\n\r\n1. get() function on integer values returns the value difenter if in the Entry the value starts with zero.\r\n\r\n   Example:\r\n\r\n\r\n\r\n```python\r\n\r\nestruct = {\"value\": int()}\r\n\r\n```\r\n\r\n\r\n\r\n![Bug Example](src/bug_example.PNG)\r\n\r\n\r\n\r\nreturn get()\r\n\r\n\r\n\r\n```python\r\n\r\n{'value': 55}\r\n\r\n```\r\n\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "form for tkinter",
    "version": "0.1.5.1",
    "split_keywords": [
        "tkinter",
        "form",
        "form tkinter",
        "tkinter interface",
        "simple tkinter",
        "tkform",
        "tk form"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8bbf9518031a720ca8658fd797aec6a678ea3eaf250b607ac25ac325ef884ee1",
                "md5": "6ac41ef59c2f45dc4f72de8695468501",
                "sha256": "b2b4670e68d1253f07a4ab006ea1f0a2a0a5770c74825d73a46aa69ea3c71069"
            },
            "downloads": -1,
            "filename": "tkinter_form-0.1.5.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "6ac41ef59c2f45dc4f72de8695468501",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 7078,
            "upload_time": "2023-04-23T07:00:28",
            "upload_time_iso_8601": "2023-04-23T07:00:28.824475Z",
            "url": "https://files.pythonhosted.org/packages/8b/bf/9518031a720ca8658fd797aec6a678ea3eaf250b607ac25ac325ef884ee1/tkinter_form-0.1.5.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a1ab4389a61e8e47da083f0b7b3a12acffc1f08ca73d791888dda9b8b19188b2",
                "md5": "5b1e930b53b85a9f525e29c5ffb09246",
                "sha256": "1cfa3f3935e0528e695d7dba17403ad53c0788567610711674fe4a0492d5cd9a"
            },
            "downloads": -1,
            "filename": "tkinter_form-0.1.5.1.tar.gz",
            "has_sig": false,
            "md5_digest": "5b1e930b53b85a9f525e29c5ffb09246",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 8722,
            "upload_time": "2023-04-23T07:00:30",
            "upload_time_iso_8601": "2023-04-23T07:00:30.743903Z",
            "url": "https://files.pythonhosted.org/packages/a1/ab/4389a61e8e47da083f0b7b3a12acffc1f08ca73d791888dda9b8b19188b2/tkinter_form-0.1.5.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-04-23 07:00:30",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "github_user": "JohanEstebanCuervo",
    "github_project": "tkinter_form",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "tkinter-form"
}
        
Elapsed time: 0.06076s