VIStk 0.3.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of VIStk might be problematic. Click here for more details.
- vistk-0.3.6/.github/workflows/publish.yml +52 -0
- vistk-0.3.6/.gitignore +5 -0
- vistk-0.3.6/Form/Icons/VIS.ico +0 -0
- vistk-0.3.6/Form/README.txt +1 -0
- vistk-0.3.6/Form/Screens/__init__.py +0 -0
- vistk-0.3.6/Form/Screens/root.py +12 -0
- vistk-0.3.6/Form/Screens/styles.py +4 -0
- vistk-0.3.6/Form/modules/__init__.py +0 -0
- vistk-0.3.6/LICENSE +24 -0
- vistk-0.3.6/PKG-INFO +50 -0
- vistk-0.3.6/README.md +5 -0
- vistk-0.3.6/Untitled.xcf +0 -0
- vistk-0.3.6/VIS/Form.zip +0 -0
- vistk-0.3.6/VIS/Templates/collect.txt +5 -0
- vistk-0.3.6/VIS/Templates/f_element.txt +25 -0
- vistk-0.3.6/VIS/Templates/screen.txt +45 -0
- vistk-0.3.6/VIS/Templates/spec.txt +33 -0
- vistk-0.3.6/VIS/VIS.py +96 -0
- vistk-0.3.6/VIS/__init__.py +5 -0
- vistk-0.3.6/VIS/__pycache__/__init__.cpython-313.pyc +0 -0
- vistk-0.3.6/VIS/elements.py +27 -0
- vistk-0.3.6/VIS/menu.py +66 -0
- vistk-0.3.6/VIS/patch.py +11 -0
- vistk-0.3.6/VIS/project.py +16 -0
- vistk-0.3.6/VIS/release.py +107 -0
- vistk-0.3.6/VIS/screen.py +15 -0
- vistk-0.3.6/VIS/stitch.py +37 -0
- vistk-0.3.6/VIStk.egg-info/PKG-INFO +50 -0
- vistk-0.3.6/VIStk.egg-info/SOURCES.txt +45 -0
- vistk-0.3.6/VIStk.egg-info/dependency_links.txt +1 -0
- vistk-0.3.6/VIStk.egg-info/entry_points.txt +2 -0
- vistk-0.3.6/VIStk.egg-info/requires.txt +1 -0
- vistk-0.3.6/VIStk.egg-info/top_level.txt +1 -0
- vistk-0.3.6/__pycache__/VIS.cpython-313.pyc +0 -0
- vistk-0.3.6/__pycache__/__init__.cpython-313.pyc +0 -0
- vistk-0.3.6/__pycache__/cleanup.cpython-313.pyc +0 -0
- vistk-0.3.6/__pycache__/elements.cpython-313.pyc +0 -0
- vistk-0.3.6/__pycache__/menu.cpython-313.pyc +0 -0
- vistk-0.3.6/__pycache__/patch.cpython-313.pyc +0 -0
- vistk-0.3.6/__pycache__/project.cpython-313.pyc +0 -0
- vistk-0.3.6/__pycache__/screen.cpython-313.pyc +0 -0
- vistk-0.3.6/__pycache__/stitch.cpython-313.pyc +0 -0
- vistk-0.3.6/changelog.md +110 -0
- vistk-0.3.6/documentation.md +3 -0
- vistk-0.3.6/knownissues.md +11 -0
- vistk-0.3.6/pyproject.toml +34 -0
- vistk-0.3.6/setup.cfg +4 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on: push
|
|
4
|
+
|
|
5
|
+
jobs:
|
|
6
|
+
build:
|
|
7
|
+
name: Build distribution 📦
|
|
8
|
+
runs-on: ubuntu-latest
|
|
9
|
+
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v4
|
|
12
|
+
with:
|
|
13
|
+
persist-credentials: false
|
|
14
|
+
- name: Set up Python
|
|
15
|
+
uses: actions/setup-python@v5
|
|
16
|
+
with:
|
|
17
|
+
python-version: "3.x"
|
|
18
|
+
- name: Install pypa/build
|
|
19
|
+
run: >-
|
|
20
|
+
python3 -m
|
|
21
|
+
pip install
|
|
22
|
+
build
|
|
23
|
+
--user
|
|
24
|
+
- name: Build a binary wheel and a source tarball
|
|
25
|
+
run: python3 -m build
|
|
26
|
+
- name: Store the distribution packages
|
|
27
|
+
uses: actions/upload-artifact@v4
|
|
28
|
+
with:
|
|
29
|
+
name: python-package-distributions
|
|
30
|
+
path: dist/
|
|
31
|
+
|
|
32
|
+
publish-to-pypi:
|
|
33
|
+
name: >-
|
|
34
|
+
Publish to PyPI
|
|
35
|
+
if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes
|
|
36
|
+
needs:
|
|
37
|
+
- build
|
|
38
|
+
runs-on: ubuntu-latest
|
|
39
|
+
environment:
|
|
40
|
+
name: release
|
|
41
|
+
url: https://pypi.org/p/VIStk # Replace <package-name> with your PyPI project name
|
|
42
|
+
permissions:
|
|
43
|
+
id-token: write # IMPORTANT: mandatory for trusted publishing
|
|
44
|
+
|
|
45
|
+
steps:
|
|
46
|
+
- name: Download all the dists
|
|
47
|
+
uses: actions/download-artifact@v4
|
|
48
|
+
with:
|
|
49
|
+
name: python-package-distributions
|
|
50
|
+
path: dist/
|
|
51
|
+
- name: Publish distribution 📦 to PyPI
|
|
52
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
vistk-0.3.6/.gitignore
ADDED
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
This is your readme to fill with your wonderful thoughts!!!
|
|
File without changes
|
|
File without changes
|
vistk-0.3.6/LICENSE
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
BSD 2-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025, Elijah Love
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
16
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
17
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
18
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
19
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
20
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
21
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
22
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
23
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
24
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
vistk-0.3.6/PKG-INFO
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: VIStk
|
|
3
|
+
Version: 0.3.6
|
|
4
|
+
Summary: Visual Interfacing Structure for python using tkinter
|
|
5
|
+
Author-email: Elijah Love <elijah2005l@gmail.com>
|
|
6
|
+
Maintainer-email: Elijah Love <elijah2005l@gmail.com>
|
|
7
|
+
License: BSD 2-Clause License
|
|
8
|
+
|
|
9
|
+
Copyright (c) 2025, Elijah Love
|
|
10
|
+
|
|
11
|
+
Redistribution and use in source and binary forms, with or without
|
|
12
|
+
modification, are permitted provided that the following conditions are met:
|
|
13
|
+
|
|
14
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
15
|
+
list of conditions and the following disclaimer.
|
|
16
|
+
|
|
17
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
18
|
+
this list of conditions and the following disclaimer in the documentation
|
|
19
|
+
and/or other materials provided with the distribution.
|
|
20
|
+
|
|
21
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
22
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
23
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
24
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
25
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
26
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
27
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
28
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
29
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
30
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
31
|
+
|
|
32
|
+
Project-URL: Homepage, https://github.com/KarlTheKrazyKat/VIS/blob/master/README.md
|
|
33
|
+
Project-URL: Documentation, https://github.com/KarlTheKrazyKat/VIS/blob/master/documentation.md
|
|
34
|
+
Project-URL: Repository, https://github.com/KarlTheKrazyKat/VIS/
|
|
35
|
+
Project-URL: Bug Tracker, https://github.com/KarlTheKrazyKat/VIS/blob/master/knownissues.md
|
|
36
|
+
Project-URL: Changelog, https://github.com/KarlTheKrazyKat/VIS/blob/master/changelog.md
|
|
37
|
+
Keywords: python,gui
|
|
38
|
+
Classifier: Development Status :: 4 - Beta
|
|
39
|
+
Classifier: Programming Language :: Python
|
|
40
|
+
Requires-Python: >=3.13
|
|
41
|
+
Description-Content-Type: text/markdown
|
|
42
|
+
License-File: LICENSE
|
|
43
|
+
Requires-Dist: tk
|
|
44
|
+
Dynamic: license-file
|
|
45
|
+
|
|
46
|
+
# Welcome to my Visual Interfacing Structure (VIS)
|
|
47
|
+
|
|
48
|
+
A simple to use framework to build GUIs for python apps
|
|
49
|
+
|
|
50
|
+
Enjoy!
|
vistk-0.3.6/README.md
ADDED
vistk-0.3.6/Untitled.xcf
ADDED
|
Binary file
|
vistk-0.3.6/VIS/Form.zip
ADDED
|
Binary file
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#Default Imports
|
|
2
|
+
from tkinter import *
|
|
3
|
+
from tkinter import ttk
|
|
4
|
+
from Screens.root import *
|
|
5
|
+
#File Specific Imports
|
|
6
|
+
|
|
7
|
+
#Create Frame
|
|
8
|
+
<frame> = ttk.Frame(root)
|
|
9
|
+
<frame>.grid(column=0,row=0,columnspan=1,rowspan=1,sticky=(N, S, E, W))
|
|
10
|
+
|
|
11
|
+
#Configure Frame Grid
|
|
12
|
+
<frame>.columnconfigure(1,weight=1)
|
|
13
|
+
<frame>.rowconfigure(1,weight=1)
|
|
14
|
+
|
|
15
|
+
#Declare Stringvars
|
|
16
|
+
|
|
17
|
+
#Button Commands and Functions
|
|
18
|
+
|
|
19
|
+
#Navigation
|
|
20
|
+
|
|
21
|
+
#########################
|
|
22
|
+
#####Visual Elements#####
|
|
23
|
+
#########################
|
|
24
|
+
|
|
25
|
+
#Element Descriptions
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#Default Imports
|
|
2
|
+
from tkinter import *
|
|
3
|
+
from tkinter import ttk
|
|
4
|
+
from Screens.root import *
|
|
5
|
+
import sys
|
|
6
|
+
#File Specific Imports
|
|
7
|
+
|
|
8
|
+
#Configure Screen
|
|
9
|
+
print(cfp)
|
|
10
|
+
|
|
11
|
+
w = 1080
|
|
12
|
+
h = 720
|
|
13
|
+
ws = root.winfo_screenwidth()
|
|
14
|
+
hs = root.winfo_screenheight()
|
|
15
|
+
x = (ws/2) - (w/2)
|
|
16
|
+
y = (hs/2) - (h/2)
|
|
17
|
+
root.geometry('%dx%d+%d+%d' % (w, h, x, y))
|
|
18
|
+
root.title("Placeholder Title")
|
|
19
|
+
root.minsize(1080,720)
|
|
20
|
+
#root.iconbitmap("<project>/Images/Icons/<some_icon>")
|
|
21
|
+
|
|
22
|
+
#Screen Elements
|
|
23
|
+
|
|
24
|
+
#Screen Grid
|
|
25
|
+
root.grid_columnconfigure(0,weight=1)
|
|
26
|
+
root.grid_rowconfigure(0,weight=1)
|
|
27
|
+
|
|
28
|
+
#Screen Modules
|
|
29
|
+
|
|
30
|
+
#Handle Arguments
|
|
31
|
+
|
|
32
|
+
#Define Loop Modules
|
|
33
|
+
def loop():
|
|
34
|
+
#screen modules run here
|
|
35
|
+
1+1
|
|
36
|
+
|
|
37
|
+
#Update Loop
|
|
38
|
+
while True:
|
|
39
|
+
try:
|
|
40
|
+
if root.winfo_exists():
|
|
41
|
+
try:loop()
|
|
42
|
+
except:pass
|
|
43
|
+
root.update()
|
|
44
|
+
except:
|
|
45
|
+
break
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
$name$_a = Analysis(
|
|
2
|
+
['../$file$'],
|
|
3
|
+
pathex=[],
|
|
4
|
+
binaries=[],
|
|
5
|
+
datas=[],
|
|
6
|
+
hiddenimports=[],
|
|
7
|
+
hookspath=[],
|
|
8
|
+
hooksconfig={},
|
|
9
|
+
runtime_hooks=[],
|
|
10
|
+
excludes=[],
|
|
11
|
+
noarchive=False,
|
|
12
|
+
optimize=0,)
|
|
13
|
+
$name$_pyz = PYZ($name$_a.pure)
|
|
14
|
+
$name$_exe = EXE(
|
|
15
|
+
$name$_pyz,
|
|
16
|
+
$name$_a.scripts,
|
|
17
|
+
$name$_a.binaries,
|
|
18
|
+
$name$_a.datas,
|
|
19
|
+
[],
|
|
20
|
+
exclude_binaries=True,
|
|
21
|
+
name='$name$',
|
|
22
|
+
debug=False,
|
|
23
|
+
bootloader_ignore_signals=False,
|
|
24
|
+
strip=False,
|
|
25
|
+
upx=True,
|
|
26
|
+
console=False,
|
|
27
|
+
disable_windowed_traceback=False,
|
|
28
|
+
argv_emulation=False,
|
|
29
|
+
target_arch=None,
|
|
30
|
+
codesign_identity=None,
|
|
31
|
+
entitlements_file=None,
|
|
32
|
+
icon=['../Icons/$icon$.ico'],)
|
|
33
|
+
|
vistk-0.3.6/VIS/VIS.py
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
import zipfile
|
|
4
|
+
import subprocess
|
|
5
|
+
import shutil
|
|
6
|
+
import project as vp
|
|
7
|
+
from importlib import metadata
|
|
8
|
+
import json
|
|
9
|
+
|
|
10
|
+
#Need to get current python location where VIS is installed
|
|
11
|
+
vl = subprocess.check_output('python -c "import os, sys; print(os.path.dirname(sys.executable))"').decode().strip("\r\n")+"\\Lib\\site-packages\\VIS\\"
|
|
12
|
+
#print(vl)
|
|
13
|
+
|
|
14
|
+
inp = sys.argv
|
|
15
|
+
#print("entered ",inp[1]," as ",inp)
|
|
16
|
+
try:
|
|
17
|
+
(wd := os.getcwd()) if inp[1] in ["new","New","N","n"] else (wd := vp.getPath())
|
|
18
|
+
except:
|
|
19
|
+
print(f"VIS Version {metadata.version("VIS")}")
|
|
20
|
+
sys.exit()
|
|
21
|
+
|
|
22
|
+
#Copied from source
|
|
23
|
+
#https://stackoverflow.com/a/75246706
|
|
24
|
+
def unzip_without_overwrite(src_path, dst_dir):
|
|
25
|
+
with zipfile.ZipFile(src_path, "r") as zf:
|
|
26
|
+
for member in zf.infolist():
|
|
27
|
+
file_path = os.path.join(dst_dir, member.filename)
|
|
28
|
+
if not os.path.exists(file_path):
|
|
29
|
+
zf.extract(member, dst_dir)
|
|
30
|
+
def __main__():
|
|
31
|
+
match inp[1]:
|
|
32
|
+
case "new"|"New"|"N"|"n":#Create a new VIS project
|
|
33
|
+
if vp.getPath() == None:
|
|
34
|
+
os.mkdir(wd+"\\.VIS")
|
|
35
|
+
open(wd+"/.VIS/path.cfg","w").write(wd) if os.path.exists(wd+"/.VIS/path.cfg") else open(wd+"/.VIS/path.cfg", 'a').write(wd)
|
|
36
|
+
print(f"Created path.cfg as {vp.getPath()}")
|
|
37
|
+
unzip_without_overwrite(vl.replace("\\","/")+"Form.zip",wd)#Unzip project template to project
|
|
38
|
+
shutil.copytree(vl+"Templates",wd+".VIS/Templates",dirs_exist_ok=True)#copy templates to project
|
|
39
|
+
#DO NOT MESS WITH THE TEMPLATE HEADERS
|
|
40
|
+
title = input("Enter a name for the VIS project:")
|
|
41
|
+
info = {}
|
|
42
|
+
info[title] = {}
|
|
43
|
+
info[title]["Screens"]={}
|
|
44
|
+
info[title]["defaults"]={}
|
|
45
|
+
info[title]["defaults"]["icon"]="VIS"#default icon
|
|
46
|
+
os.mkdir(wd+"\\.VIS\\project.json")
|
|
47
|
+
with open(wd+"/.VIS/project.json","w") as f:
|
|
48
|
+
json.dump(info,f,indent=4)
|
|
49
|
+
else:
|
|
50
|
+
print(f"VIS project already initialized with path {vp.getPath()}")
|
|
51
|
+
|
|
52
|
+
case "add" | "Add" | "a" | "A":
|
|
53
|
+
match inp[2]:
|
|
54
|
+
case "screen" | "Screen" | "s" | "S":
|
|
55
|
+
screen = inp[3] #File & directory creation for VIS structure
|
|
56
|
+
print("Screens/"+screen+"\t exists") if os.path.exists(wd+"/Screens/"+screen) else os.mkdir(wd+"/Screens/"+screen)
|
|
57
|
+
print("modules/"+screen+"\t exists") if os.path.exists(wd+"/modules/"+screen) else os.mkdir(wd+"/modules/"+screen)
|
|
58
|
+
print(screen+".py\t\t exists") if os.path.exists(wd+screen+".py") else shutil.copyfile(wd+"/.VIS/Templates/screen.txt",wd+"/"+screen+".py")
|
|
59
|
+
|
|
60
|
+
with open(wd+"/.VIS/project.json","r") as f:
|
|
61
|
+
info = json.load(f)
|
|
62
|
+
name = list(info.keys())[0]
|
|
63
|
+
if info[name]["Screens"].get(screen) == None:
|
|
64
|
+
sc_name = input("What is the name of this screen?: ")
|
|
65
|
+
info[name]["Screens"][sc_name] ={}
|
|
66
|
+
info[name]["Screens"][sc_name]["script"] = screen+".py"
|
|
67
|
+
match input("Should this screen have its own .exe?: "):
|
|
68
|
+
case "Yes" | "yes" | "Y" | "y":
|
|
69
|
+
info[name]["Screens"][sc_name]["release"] = "TRUE"
|
|
70
|
+
case _:
|
|
71
|
+
info[name]["Screens"][sc_name]["release"] = "FALSE"
|
|
72
|
+
ictf =input("What is the icon for this screen (or none)?: ")
|
|
73
|
+
if ".ICO" in ictf.upper():
|
|
74
|
+
info[name]["Screens"][sc_name]["icon"] = ictf.strip(".ico")
|
|
75
|
+
with open(wd+"/.VIS/project.json","w") as f:
|
|
76
|
+
json.dump(info,f,indent=4)
|
|
77
|
+
#somewhere in this process we can attempt to replace "Placeholder Title" and the root.iconbitmap
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
if len(inp) >= 5:
|
|
81
|
+
match inp[4]:
|
|
82
|
+
case "menu" | "Menu" | "m" | "M":
|
|
83
|
+
print("Add screen menu")
|
|
84
|
+
case "elements" | "Elements" | "e" | "E":
|
|
85
|
+
subprocess.call("python " + vl.replace("\\","/")+"/elements.py "+ screen + " " + inp[5])
|
|
86
|
+
else:
|
|
87
|
+
print("Add Screen")
|
|
88
|
+
|
|
89
|
+
case "patch" | "Patch" | "p" | "P":
|
|
90
|
+
subprocess.call("python " + vl.replace("\\","/")+"/patch.py " + inp[2])
|
|
91
|
+
|
|
92
|
+
case "stitch" | "Stitch" | "s" | "S":
|
|
93
|
+
subprocess.call("python " + vl.replace("\\","/")+"/stitch.py "+ inp[2])
|
|
94
|
+
|
|
95
|
+
case "release" | "Release" | "r" | "R":
|
|
96
|
+
subprocess.call("python " + vl.replace("\\","/")+"/release.py " + inp[2])
|
|
Binary file
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import shutil
|
|
3
|
+
import os
|
|
4
|
+
import subprocess
|
|
5
|
+
import project as vp
|
|
6
|
+
|
|
7
|
+
screen = sys.argv[1]
|
|
8
|
+
elements = sys.argv[2]
|
|
9
|
+
elements = elements.split('-')
|
|
10
|
+
|
|
11
|
+
project = vp.getPath()
|
|
12
|
+
|
|
13
|
+
for e in elements:
|
|
14
|
+
if not os.path.exists(project+"/Screens/"+screen+"/f_"+e+".py"):
|
|
15
|
+
shutil.copyfile(project+"/.VIS/Templates/f_element.txt",project+"/Screens/"+screen+"/f_"+e+".py")
|
|
16
|
+
print("element\tf_"+e+".py\tcreated in\tScreens/"+screen+"/")
|
|
17
|
+
subprocess.call("VIS patch "+project+"/Screens/"+screen+"/"+e+".py")
|
|
18
|
+
|
|
19
|
+
if not os.path.exists(project+"/modules/"+screen+"/m_"+e+".py"):
|
|
20
|
+
with open(project+"/modules/"+screen+"/m_"+e+".py", "w"): pass
|
|
21
|
+
print("module\tm_"+e+".py\tcreated in\tScreens/"+screen+"/")
|
|
22
|
+
|
|
23
|
+
if not os.path.exists(project+"/"+screen+".py"):#cannot create elements without screen so will create screen if it doesnt exist
|
|
24
|
+
shutil.copyfile(project+"/.VIS/Templates/screen.txt"+project+"/"+screen+".py")
|
|
25
|
+
print("screen\t"+e+".py \tcreated in\troot")
|
|
26
|
+
|
|
27
|
+
subprocess.call("VIS stitch "+screen)
|
vistk-0.3.6/VIS/menu.py
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from tkinter import *
|
|
3
|
+
from tkinter import ttk
|
|
4
|
+
import subprocess
|
|
5
|
+
import sys
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
if str.upper(sys.platform)=="WIN32":
|
|
9
|
+
cfp = 'win'
|
|
10
|
+
else:
|
|
11
|
+
cfp = 'rasp'
|
|
12
|
+
|
|
13
|
+
class Item(Menu):
|
|
14
|
+
"""Each item in the menu is created from the corresponding .json file. Each path should be given relative to xyz/WOM/
|
|
15
|
+
"""
|
|
16
|
+
def __init__(self,root,_root,path,nav,*args,**kwargs):
|
|
17
|
+
self.button = ttk.Button(root, *args, **kwargs)
|
|
18
|
+
self.root = root
|
|
19
|
+
self.path = path
|
|
20
|
+
self._root = _root
|
|
21
|
+
self.nav = nav
|
|
22
|
+
self.button.config(command = self.itemPath)
|
|
23
|
+
#self.button.pack()
|
|
24
|
+
|
|
25
|
+
def itemPath(self):
|
|
26
|
+
self.root.destroy()
|
|
27
|
+
if ".exe" in self.path:
|
|
28
|
+
os.startfile(self.path)
|
|
29
|
+
else:
|
|
30
|
+
subprocess.call("pythonw.exe "+self.path)
|
|
31
|
+
self._root.destroy()
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class Menu:
|
|
36
|
+
"""The menu class drawings a column of buttons with subprocess calls to paths defined in a corresponding .json file.
|
|
37
|
+
|
|
38
|
+
Has two roots because can destory both main window and subwindow on redirect.
|
|
39
|
+
"""
|
|
40
|
+
def __init__(self, root, _root, path):
|
|
41
|
+
root.focus_force()#use to force window into focus
|
|
42
|
+
self.path = path
|
|
43
|
+
self.n_dict = {}
|
|
44
|
+
with open(path) as file:
|
|
45
|
+
self.dict = json.load(file)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
for item in self.dict:
|
|
49
|
+
|
|
50
|
+
ob = Item(root,_root,
|
|
51
|
+
path= self.dict[item]["path"],
|
|
52
|
+
nav = self.dict[item]["nav"],
|
|
53
|
+
text = self.dict[item]["text"]
|
|
54
|
+
)
|
|
55
|
+
ob.button.pack()
|
|
56
|
+
self.n_dict[ob.nav]=ob
|
|
57
|
+
|
|
58
|
+
root.bind("<KeyPress>",self.menuNav)
|
|
59
|
+
|
|
60
|
+
def menuNav(self,happ):
|
|
61
|
+
k=happ.char
|
|
62
|
+
if self.n_dict.get(k) != None:
|
|
63
|
+
self.n_dict[k].itemPath()
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
vistk-0.3.6/VIS/patch.py
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
|
|
3
|
+
file = sys.argv[1]
|
|
4
|
+
frame = file.split('/')[-1][:-3]
|
|
5
|
+
file=file.replace(frame,"f_"+frame)
|
|
6
|
+
with open(file,"r") as f:
|
|
7
|
+
text = f.read()
|
|
8
|
+
text = text.replace("<frame>","f_"+frame)
|
|
9
|
+
with open(file,"w") as f:
|
|
10
|
+
f.write(text)
|
|
11
|
+
print("patched\tf_"+frame+".py")
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import os
|
|
2
|
+
def getPath():
|
|
3
|
+
"""Searches for .VIS folder and returns from path.cfg
|
|
4
|
+
"""
|
|
5
|
+
sto = 0
|
|
6
|
+
while True:
|
|
7
|
+
try:
|
|
8
|
+
step=""
|
|
9
|
+
for i in range(0,sto,1): #iterate on sto to step backwards and search for project info
|
|
10
|
+
step = "../" + step
|
|
11
|
+
if os.path.exists(step+".VIS/"):
|
|
12
|
+
return open(step+".VIS/path.cfg","r").read().replace("\\","/") #return stored path
|
|
13
|
+
else:
|
|
14
|
+
sto += 1
|
|
15
|
+
except:
|
|
16
|
+
return None #if failed return none
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from project import *
|
|
3
|
+
import subprocess
|
|
4
|
+
import json
|
|
5
|
+
import shutil
|
|
6
|
+
from os.path import exists
|
|
7
|
+
|
|
8
|
+
root = getPath()
|
|
9
|
+
info = {}
|
|
10
|
+
with open(root+"/.VIS/project.json","r") as f:
|
|
11
|
+
info = json.load(f)
|
|
12
|
+
name = list(info.keys())[0]
|
|
13
|
+
|
|
14
|
+
def build(version:str=""):
|
|
15
|
+
"""Build project spec file with specific version
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
print(f"Creating project.spec for {name}")
|
|
19
|
+
|
|
20
|
+
with open(root+"/.VIS/Templates/spec.txt","r") as f:
|
|
21
|
+
spec = f.read()
|
|
22
|
+
with open(root+"/.VIS/Templates/collect.txt","r") as f:
|
|
23
|
+
collect = f.read()
|
|
24
|
+
|
|
25
|
+
spec_list = []
|
|
26
|
+
name_list = []
|
|
27
|
+
|
|
28
|
+
for i in info[name]["Screens"].keys():
|
|
29
|
+
if info[name]["Screens"][i]["release"] == "TRUE":
|
|
30
|
+
name_list.append(i)
|
|
31
|
+
file = info[name]["Screens"][i]["script"]
|
|
32
|
+
#icon = "du"
|
|
33
|
+
if not info[name]["Screens"][i].get("icon") == None:
|
|
34
|
+
icon = info[name]["Screens"][i]["icon"]
|
|
35
|
+
else:
|
|
36
|
+
icon = info[name]["defaults"]["icon"]
|
|
37
|
+
spec_list.append(spec.replace("$name$",i))
|
|
38
|
+
spec_list[len(spec_list)-1] = spec_list[len(spec_list)-1].replace("$icon$",icon)
|
|
39
|
+
spec_list[len(spec_list)-1] = spec_list[len(spec_list)-1].replace("$file$",file)
|
|
40
|
+
spec_list.append("\n\n")
|
|
41
|
+
|
|
42
|
+
insert = ""
|
|
43
|
+
for i in name_list:
|
|
44
|
+
insert=insert+"\n\t"+i+"_exe,\n\t"+i+"_a.binaries,\n\t"+i+"_a.zipfiles,\n\t"+i+"_a.datas,"
|
|
45
|
+
collect = collect.replace("$insert$",insert)
|
|
46
|
+
collect = collect.replace("$version$",name+"-"+version) if not version == "" else collect.replace("$version$",name)
|
|
47
|
+
|
|
48
|
+
header = "# -*- mode: python ; coding: utf-8 -*-\n\n\n"
|
|
49
|
+
|
|
50
|
+
with open(root+"/.VIS/project.spec","w") as f:
|
|
51
|
+
f.write(header)
|
|
52
|
+
with open(root+"/.VIS/project.spec","a") as f:
|
|
53
|
+
f.writelines(spec_list)
|
|
54
|
+
f.write(collect)
|
|
55
|
+
|
|
56
|
+
print(f"Setup project.spec for {name} {version if not version =="" else "current"}")#advanced version will improve this
|
|
57
|
+
|
|
58
|
+
def clean(version:str=" "):
|
|
59
|
+
"""Cleans up build environment to save space
|
|
60
|
+
"""
|
|
61
|
+
print("Cleaning up build environment")
|
|
62
|
+
if version == "":
|
|
63
|
+
if exists(f"{root}/dist/{name}/Icons/"): shutil.rmtree(f"{root}/dist/{name}/Icons/")
|
|
64
|
+
if exists(f"{root}/dist/{name}/Images/"): shutil.rmtree(f"{root}/dist/{name}/Images/")
|
|
65
|
+
shutil.copytree(root+"/Icons/",f"{root}/dist/{name}/Icons/",dirs_exist_ok=True)
|
|
66
|
+
shutil.copytree(root+"/Images/",f"{root}/dist/{name}/Images/",dirs_exist_ok=True)
|
|
67
|
+
else:
|
|
68
|
+
if exists(f"{root}/dist/{name}/Icons/"): shutil.rmtree(f"{root}/dist/{name}/Icons/")
|
|
69
|
+
if exists(f"{root}/dist/{name}/Images/"): shutil.rmtree(f"{root}/dist/{name}/Images/")
|
|
70
|
+
shutil.copytree(root+"/Icons/",f"{root}/dist/{name}-{version.strip(" ")}/Icons/",dirs_exist_ok=True)
|
|
71
|
+
shutil.copytree(root+"/Images/",f"{root}/dist/{name}-{version.strip(" ")}/Images/",dirs_exist_ok=True)
|
|
72
|
+
print(f"\n\nReleased new{version}build of {name}!")
|
|
73
|
+
|
|
74
|
+
version = sys.argv[1]
|
|
75
|
+
match version:
|
|
76
|
+
case "a":
|
|
77
|
+
build("alpha")
|
|
78
|
+
subprocess.call(f"pyinstaller {root}/.VIS/project.spec --noconfirm --distpath {root}/dist/ --log-level FATAL")
|
|
79
|
+
clean(" alpha ")
|
|
80
|
+
case "b":
|
|
81
|
+
build("beta")
|
|
82
|
+
subprocess.call(f"pyinstaller {root}/.VIS/project.spec --noconfirm --distpath {root}/dist/ --log-level FATAL")
|
|
83
|
+
clean(" beta ")
|
|
84
|
+
case "c":
|
|
85
|
+
build()
|
|
86
|
+
subprocess.call(f"pyinstaller {root}/.VIS/project.spec --noconfirm --distpath {root}/dist/ --log-level FATAL")
|
|
87
|
+
clean()
|
|
88
|
+
case "sync":
|
|
89
|
+
build("alpha")
|
|
90
|
+
subprocess.call(f"pyinstaller {root}/.VIS/project.spec --noconfirm --distpath {root}/dist/ --log-level FATAL")
|
|
91
|
+
clean(" alpha ")
|
|
92
|
+
build("beta")
|
|
93
|
+
subprocess.call(f"pyinstaller {root}/.VIS/project.spec --noconfirm --distpath {root}/dist/ --log-level FATAL")
|
|
94
|
+
clean(" beta ")
|
|
95
|
+
build()
|
|
96
|
+
subprocess.call(f"pyinstaller {root}/.VIS/project.spec --noconfirm --distpath {root}/dist/ --log-level FATAL")
|
|
97
|
+
clean()
|
|
98
|
+
print("\t- alpha\n\t- beta\n\t- current")
|
|
99
|
+
case _:
|
|
100
|
+
inp = input(f"Release Project Version {version}?")
|
|
101
|
+
match inp:
|
|
102
|
+
case "y" | "Y" | "yes" | "Yes":
|
|
103
|
+
build(version)
|
|
104
|
+
subprocess.call(f"pyinstaller {root}/.VIS/project.spec --noconfirm --distpath {root}/dist/ --log-level FATAL")
|
|
105
|
+
clean(f" {version} ")
|
|
106
|
+
case _:
|
|
107
|
+
print(f"Could not release Project Version {version}")
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
file = sys.argv[1]
|
|
3
|
+
frame = file.split('\\')[-1][:-3]
|
|
4
|
+
dump_screens = False
|
|
5
|
+
dump_modules = False
|
|
6
|
+
with open(file,"r") as f:
|
|
7
|
+
text= f.readlines()
|
|
8
|
+
for line in text:
|
|
9
|
+
if "screen elements" in line.lower():
|
|
10
|
+
dump_screens=True
|
|
11
|
+
elif "screen elements" in line.lower():
|
|
12
|
+
dump_modules=True
|
|
13
|
+
|
|
14
|
+
with open(file,"w") as f:
|
|
15
|
+
f.write(text)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import re
|
|
3
|
+
import glob
|
|
4
|
+
import project as vp
|
|
5
|
+
|
|
6
|
+
project = vp.getPath()
|
|
7
|
+
screen = sys.argv[1]
|
|
8
|
+
with open(project+"/"+screen+".py","r") as f:
|
|
9
|
+
text = f.read()
|
|
10
|
+
|
|
11
|
+
#Elements
|
|
12
|
+
pattern = r"#Screen Elements.*#Screen Grid"
|
|
13
|
+
replacement = glob.glob(project+"/Screens/"+screen+'/f_*')
|
|
14
|
+
for i in range(0,len(replacement),1):
|
|
15
|
+
replacement[i] = replacement[i].replace("\\","/")
|
|
16
|
+
replacement[i] = replacement[i].replace(project+"/Screens/"+screen+"/","Screens."+screen+".")[:-3]
|
|
17
|
+
#print(replacement)
|
|
18
|
+
replacement = "from " + " import *\nfrom ".join(replacement) + " import *\n"
|
|
19
|
+
#print(replacement)
|
|
20
|
+
text = re.sub(pattern, "#Screen Elements\n" + replacement + "\n#Screen Grid", text, flags=re.DOTALL)
|
|
21
|
+
|
|
22
|
+
#Modules
|
|
23
|
+
pattern = r"#Screen Modules.*#Handle Arguments"
|
|
24
|
+
replacement = glob.glob(project+"/modules/"+screen+'/m_*')
|
|
25
|
+
for i in range(0,len(replacement),1):
|
|
26
|
+
replacement[i] = replacement[i].replace("\\","/")
|
|
27
|
+
print("stitching\t"+replacement[i].strip(project)+"\tto\t"+screen+".py")
|
|
28
|
+
replacement[i] = replacement[i].replace(project+"/modules/"+screen+"/","modules."+screen+".")[:-3]
|
|
29
|
+
#print(replacement)
|
|
30
|
+
replacement = "from " + " import *\nfrom ".join(replacement) + " import *\n"
|
|
31
|
+
#print(replacement)
|
|
32
|
+
text = re.sub(pattern, "#Screen Modules\n" + replacement + "\n#Handle Arguments", text, flags=re.DOTALL)
|
|
33
|
+
#print(text)
|
|
34
|
+
|
|
35
|
+
with open(project+"/"+screen+".py","w") as f:
|
|
36
|
+
f.write(text)
|
|
37
|
+
print("stitched\t"+screen+".py\twith\tall")
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: VIStk
|
|
3
|
+
Version: 0.3.6
|
|
4
|
+
Summary: Visual Interfacing Structure for python using tkinter
|
|
5
|
+
Author-email: Elijah Love <elijah2005l@gmail.com>
|
|
6
|
+
Maintainer-email: Elijah Love <elijah2005l@gmail.com>
|
|
7
|
+
License: BSD 2-Clause License
|
|
8
|
+
|
|
9
|
+
Copyright (c) 2025, Elijah Love
|
|
10
|
+
|
|
11
|
+
Redistribution and use in source and binary forms, with or without
|
|
12
|
+
modification, are permitted provided that the following conditions are met:
|
|
13
|
+
|
|
14
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
15
|
+
list of conditions and the following disclaimer.
|
|
16
|
+
|
|
17
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
18
|
+
this list of conditions and the following disclaimer in the documentation
|
|
19
|
+
and/or other materials provided with the distribution.
|
|
20
|
+
|
|
21
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
22
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
23
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
24
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
25
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
26
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
27
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
28
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
29
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
30
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
31
|
+
|
|
32
|
+
Project-URL: Homepage, https://github.com/KarlTheKrazyKat/VIS/blob/master/README.md
|
|
33
|
+
Project-URL: Documentation, https://github.com/KarlTheKrazyKat/VIS/blob/master/documentation.md
|
|
34
|
+
Project-URL: Repository, https://github.com/KarlTheKrazyKat/VIS/
|
|
35
|
+
Project-URL: Bug Tracker, https://github.com/KarlTheKrazyKat/VIS/blob/master/knownissues.md
|
|
36
|
+
Project-URL: Changelog, https://github.com/KarlTheKrazyKat/VIS/blob/master/changelog.md
|
|
37
|
+
Keywords: python,gui
|
|
38
|
+
Classifier: Development Status :: 4 - Beta
|
|
39
|
+
Classifier: Programming Language :: Python
|
|
40
|
+
Requires-Python: >=3.13
|
|
41
|
+
Description-Content-Type: text/markdown
|
|
42
|
+
License-File: LICENSE
|
|
43
|
+
Requires-Dist: tk
|
|
44
|
+
Dynamic: license-file
|
|
45
|
+
|
|
46
|
+
# Welcome to my Visual Interfacing Structure (VIS)
|
|
47
|
+
|
|
48
|
+
A simple to use framework to build GUIs for python apps
|
|
49
|
+
|
|
50
|
+
Enjoy!
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
.gitignore
|
|
2
|
+
LICENSE
|
|
3
|
+
README.md
|
|
4
|
+
Untitled.xcf
|
|
5
|
+
changelog.md
|
|
6
|
+
documentation.md
|
|
7
|
+
knownissues.md
|
|
8
|
+
pyproject.toml
|
|
9
|
+
.github/workflows/publish.yml
|
|
10
|
+
Form/README.txt
|
|
11
|
+
Form/Icons/VIS.ico
|
|
12
|
+
Form/Screens/__init__.py
|
|
13
|
+
Form/Screens/root.py
|
|
14
|
+
Form/Screens/styles.py
|
|
15
|
+
Form/modules/__init__.py
|
|
16
|
+
VIS/Form.zip
|
|
17
|
+
VIS/VIS.py
|
|
18
|
+
VIS/__init__.py
|
|
19
|
+
VIS/elements.py
|
|
20
|
+
VIS/menu.py
|
|
21
|
+
VIS/patch.py
|
|
22
|
+
VIS/project.py
|
|
23
|
+
VIS/release.py
|
|
24
|
+
VIS/screen.py
|
|
25
|
+
VIS/stitch.py
|
|
26
|
+
VIS/Templates/collect.txt
|
|
27
|
+
VIS/Templates/f_element.txt
|
|
28
|
+
VIS/Templates/screen.txt
|
|
29
|
+
VIS/Templates/spec.txt
|
|
30
|
+
VIS/__pycache__/__init__.cpython-313.pyc
|
|
31
|
+
VIStk.egg-info/PKG-INFO
|
|
32
|
+
VIStk.egg-info/SOURCES.txt
|
|
33
|
+
VIStk.egg-info/dependency_links.txt
|
|
34
|
+
VIStk.egg-info/entry_points.txt
|
|
35
|
+
VIStk.egg-info/requires.txt
|
|
36
|
+
VIStk.egg-info/top_level.txt
|
|
37
|
+
__pycache__/VIS.cpython-313.pyc
|
|
38
|
+
__pycache__/__init__.cpython-313.pyc
|
|
39
|
+
__pycache__/cleanup.cpython-313.pyc
|
|
40
|
+
__pycache__/elements.cpython-313.pyc
|
|
41
|
+
__pycache__/menu.cpython-313.pyc
|
|
42
|
+
__pycache__/patch.cpython-313.pyc
|
|
43
|
+
__pycache__/project.cpython-313.pyc
|
|
44
|
+
__pycache__/screen.cpython-313.pyc
|
|
45
|
+
__pycache__/stitch.cpython-313.pyc
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
tk
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
VIS
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
vistk-0.3.6/changelog.md
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Changelog and Roadmap
|
|
2
|
+
|
|
3
|
+
## Changelog
|
|
4
|
+
|
|
5
|
+
0.3.1
|
|
6
|
+
|
|
7
|
+
- Added release command to release version of project
|
|
8
|
+
|
|
9
|
+
0.3.2
|
|
10
|
+
|
|
11
|
+
- Using internal project.json to build spec file to create release
|
|
12
|
+
|
|
13
|
+
0.3.3
|
|
14
|
+
|
|
15
|
+
- Adding a screen will add it to the json via a series of prompts
|
|
16
|
+
|
|
17
|
+
0.3.4
|
|
18
|
+
|
|
19
|
+
- Changed icons to relative path
|
|
20
|
+
|
|
21
|
+
0.3.5:
|
|
22
|
+
|
|
23
|
+
- Removed unecessary delete attempt that failed every time
|
|
24
|
+
|
|
25
|
+
0.3.6
|
|
26
|
+
|
|
27
|
+
- Added ```VIS remove sync``` to sync alpha beta and current
|
|
28
|
+
|
|
29
|
+
## Upcoming
|
|
30
|
+
|
|
31
|
+
### Pre Official Release
|
|
32
|
+
|
|
33
|
+
0.3.X:
|
|
34
|
+
|
|
35
|
+
- Auto title screens on creation
|
|
36
|
+
- Auto add icon to screen on creation
|
|
37
|
+
- Edit screen settings
|
|
38
|
+
- Some sort of version management with releases (beyond alpha/beta/current)
|
|
39
|
+
|
|
40
|
+
0.4.X
|
|
41
|
+
|
|
42
|
+
- Modify default imports
|
|
43
|
+
- Set default screen size
|
|
44
|
+
- Set specific screen size
|
|
45
|
+
- Screen minsize option
|
|
46
|
+
- Screen open location options
|
|
47
|
+
- Open fullscreen (maybe)
|
|
48
|
+
|
|
49
|
+
0.5.X
|
|
50
|
+
|
|
51
|
+
- Create _module() function by default on element creation
|
|
52
|
+
- Enable/Disable Navigation
|
|
53
|
+
- More Navigation tools
|
|
54
|
+
|
|
55
|
+
0.6.X
|
|
56
|
+
|
|
57
|
+
- Update tools to ensure that updating VIS will not break code
|
|
58
|
+
- Rework code to make simpler
|
|
59
|
+
- Yes/No handler for prompts
|
|
60
|
+
- More robust project.py
|
|
61
|
+
- Consider where project name is stored
|
|
62
|
+
|
|
63
|
+
0.7.X
|
|
64
|
+
|
|
65
|
+
- Create VIS project in new folder
|
|
66
|
+
- Default .gitignore for VIS projects
|
|
67
|
+
- Repair broken screens to use templates
|
|
68
|
+
- Custom templates and template searching
|
|
69
|
+
|
|
70
|
+
0.8.X
|
|
71
|
+
|
|
72
|
+
- Expand custom frames
|
|
73
|
+
- Scrollable frame
|
|
74
|
+
- Scrollable menu
|
|
75
|
+
- More menu options
|
|
76
|
+
|
|
77
|
+
0.9.X
|
|
78
|
+
|
|
79
|
+
- Explore .EXE options
|
|
80
|
+
- - Using dlls?
|
|
81
|
+
- - Passing root rather than destroying root to launch new windows
|
|
82
|
+
|
|
83
|
+
1.0.0
|
|
84
|
+
|
|
85
|
+
- Explore tkinter styles
|
|
86
|
+
- - Setting screen styles
|
|
87
|
+
- - Creating global styles
|
|
88
|
+
- Sample VIS programs showing Icons, modules, Screens, menus
|
|
89
|
+
|
|
90
|
+
### Anytime
|
|
91
|
+
|
|
92
|
+
- Smart refresh screens (less root.updating)
|
|
93
|
+
- Windows Registry Stuff
|
|
94
|
+
- Show subscreens as subprocess in task manager
|
|
95
|
+
- Crash Logs
|
|
96
|
+
- Grid manager
|
|
97
|
+
- Tutorial?
|
|
98
|
+
|
|
99
|
+
### Working with VIScode extension
|
|
100
|
+
|
|
101
|
+
- Configure auto object creation
|
|
102
|
+
|
|
103
|
+
#### Upcoming in vscode extension
|
|
104
|
+
|
|
105
|
+
- Add screen menu
|
|
106
|
+
- Add element menu
|
|
107
|
+
- Edit screen settings menu
|
|
108
|
+
- Global object format setting
|
|
109
|
+
- Global object format defaults
|
|
110
|
+
- Use local format for object creation if present
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools","setuptools-scm"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "VIStk"
|
|
7
|
+
version = "0.3.6"
|
|
8
|
+
license = {file="LICENSE"}
|
|
9
|
+
dependencies = ["tk"]
|
|
10
|
+
description = "Visual Interfacing Structure for python using tkinter"
|
|
11
|
+
requires-python = ">=3.13"
|
|
12
|
+
authors = [
|
|
13
|
+
{name = "Elijah Love", email = "elijah2005l@gmail.com"},
|
|
14
|
+
]
|
|
15
|
+
maintainers = [
|
|
16
|
+
{name = "Elijah Love", email = "elijah2005l@gmail.com"},
|
|
17
|
+
]
|
|
18
|
+
readme = "README.md"
|
|
19
|
+
keywords = ["python","gui"]
|
|
20
|
+
classifiers = [
|
|
21
|
+
"Development Status :: 4 - Beta",
|
|
22
|
+
"Programming Language :: Python"
|
|
23
|
+
]
|
|
24
|
+
[project.urls]
|
|
25
|
+
Homepage = "https://github.com/KarlTheKrazyKat/VIS/blob/master/README.md"
|
|
26
|
+
Documentation = "https://github.com/KarlTheKrazyKat/VIS/blob/master/documentation.md"
|
|
27
|
+
Repository = "https://github.com/KarlTheKrazyKat/VIS/"
|
|
28
|
+
"Bug Tracker" = "https://github.com/KarlTheKrazyKat/VIS/blob/master/knownissues.md"
|
|
29
|
+
Changelog = "https://github.com/KarlTheKrazyKat/VIS/blob/master/changelog.md"
|
|
30
|
+
[project.scripts]
|
|
31
|
+
VIS = "VIS.VIS:__main__"
|
|
32
|
+
[tool.setuptools]
|
|
33
|
+
packages = ["VIS"]
|
|
34
|
+
ext-modules = []
|
vistk-0.3.6/setup.cfg
ADDED