Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7ee7ccddee |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"CurrentProjectSetting": null
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"ExpandedNodes": [
|
||||
""
|
||||
],
|
||||
"SelectedNode": "\\beeptimes.py",
|
||||
"PreviewInSolutionExplorer": false
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,15 +0,0 @@
|
||||
[GENERAL]
|
||||
BeepDetailsDirectory = \\0.0.0.0\RealTimeTennis\DataBridge1\Logs\BounceDetails_1.log
|
||||
CourtName = CHANGE ME
|
||||
|
||||
[THRESHOLDS]
|
||||
Thresh1 = 120
|
||||
Thresh1str = Cheating?
|
||||
Thresh2 = 150
|
||||
Thresh2str = Looking good
|
||||
Thresh3 = 250
|
||||
Thresh3str = Little slow
|
||||
Thresh4 = 350
|
||||
Thresh4str = Noticeably slow
|
||||
Thresh5 = 351
|
||||
Thresh5str = Help!!!
|
||||
@@ -1,847 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!-- saved from url=(0056)https://kivy.org/doc/stable/guide/packaging-windows.html -->
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" data-darkreader-mode="dynamic" data-darkreader-scheme="dark"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style class="darkreader darkreader--fallback" media="screen"></style><style class="darkreader darkreader--text" media="screen"></style><style class="darkreader darkreader--invert" media="screen">.jfk-bubble.gtx-bubble, .captcheck_answer_label > input + img, span#closed_text > img[src^="https://www.gstatic.com/images/branding/googlelogo"], span[data-href^="https://www.hcaptcha.com/"] > #icon, #bit-notification-bar-iframe, ::-webkit-calendar-picker-indicator {
|
||||
filter: invert(100%) hue-rotate(180deg) contrast(90%) !important;
|
||||
}</style><style class="darkreader darkreader--inline" media="screen">[data-darkreader-inline-bgcolor] {
|
||||
background-color: var(--darkreader-inline-bgcolor) !important;
|
||||
}
|
||||
[data-darkreader-inline-bgimage] {
|
||||
background-image: var(--darkreader-inline-bgimage) !important;
|
||||
}
|
||||
[data-darkreader-inline-border] {
|
||||
border-color: var(--darkreader-inline-border) !important;
|
||||
}
|
||||
[data-darkreader-inline-border-bottom] {
|
||||
border-bottom-color: var(--darkreader-inline-border-bottom) !important;
|
||||
}
|
||||
[data-darkreader-inline-border-left] {
|
||||
border-left-color: var(--darkreader-inline-border-left) !important;
|
||||
}
|
||||
[data-darkreader-inline-border-right] {
|
||||
border-right-color: var(--darkreader-inline-border-right) !important;
|
||||
}
|
||||
[data-darkreader-inline-border-top] {
|
||||
border-top-color: var(--darkreader-inline-border-top) !important;
|
||||
}
|
||||
[data-darkreader-inline-boxshadow] {
|
||||
box-shadow: var(--darkreader-inline-boxshadow) !important;
|
||||
}
|
||||
[data-darkreader-inline-color] {
|
||||
color: var(--darkreader-inline-color) !important;
|
||||
}
|
||||
[data-darkreader-inline-fill] {
|
||||
fill: var(--darkreader-inline-fill) !important;
|
||||
}
|
||||
[data-darkreader-inline-stroke] {
|
||||
stroke: var(--darkreader-inline-stroke) !important;
|
||||
}
|
||||
[data-darkreader-inline-outline] {
|
||||
outline-color: var(--darkreader-inline-outline) !important;
|
||||
}
|
||||
[data-darkreader-inline-stopcolor] {
|
||||
stop-color: var(--darkreader-inline-stopcolor) !important;
|
||||
}</style><style class="darkreader darkreader--variables" media="screen">:root {
|
||||
--darkreader-neutral-background: #131516;
|
||||
--darkreader-neutral-text: #d8d4cf;
|
||||
--darkreader-selection-background: #004daa;
|
||||
--darkreader-selection-text: #e8e6e3;
|
||||
}</style><style class="darkreader darkreader--root-vars" media="screen"></style><style class="darkreader darkreader--user-agent" media="screen">html {
|
||||
background-color: #181a1b !important;
|
||||
}
|
||||
html, body, input, textarea, select, button {
|
||||
background-color: #181a1b;
|
||||
}
|
||||
html, body, input, textarea, select, button {
|
||||
border-color: #736b5e;
|
||||
color: #e8e6e3;
|
||||
}
|
||||
a {
|
||||
color: #3391ff;
|
||||
}
|
||||
table {
|
||||
border-color: #545b5e;
|
||||
}
|
||||
::placeholder {
|
||||
color: #b2aba1;
|
||||
}
|
||||
input:-webkit-autofill,
|
||||
textarea:-webkit-autofill,
|
||||
select:-webkit-autofill {
|
||||
background-color: #555b00 !important;
|
||||
color: #e8e6e3 !important;
|
||||
}
|
||||
::-webkit-scrollbar {
|
||||
background-color: #202324;
|
||||
color: #aba499;
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
background-color: #454a4d;
|
||||
}
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background-color: #575e62;
|
||||
}
|
||||
::-webkit-scrollbar-thumb:active {
|
||||
background-color: #484e51;
|
||||
}
|
||||
::-webkit-scrollbar-corner {
|
||||
background-color: #181a1b;
|
||||
}
|
||||
::selection {
|
||||
background-color: #004daa !important;
|
||||
color: #e8e6e3 !important;
|
||||
}
|
||||
::-moz-selection {
|
||||
background-color: #004daa !important;
|
||||
color: #e8e6e3 !important;
|
||||
}</style>
|
||||
|
||||
<meta name="twitter:site" content="@kivyframework">
|
||||
<meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/">
|
||||
|
||||
<title>Create a package for Windows — Kivy 2.0.0 documentation</title>
|
||||
<link href="./Create a package for Windows — Kivy 2.0.0 documentation_files/css" rel="stylesheet" type="text/css">
|
||||
<link rel="stylesheet" href="./Create a package for Windows — Kivy 2.0.0 documentation_files/fresh.css" type="text/css"><style class="darkreader darkreader--sync" media="screen"></style>
|
||||
<link rel="stylesheet" href="./Create a package for Windows — Kivy 2.0.0 documentation_files/pygments.css" type="text/css"><style class="darkreader darkreader--sync" media="screen"></style>
|
||||
<script type="text/javascript" async="" defer="" src="https://pw.kivy.org/pw.js"></script><script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '../',
|
||||
VERSION: '2.0.0',
|
||||
COLLAPSE_MODINDEX: false,
|
||||
FILE_SUFFIX: '.html',
|
||||
HAS_SOURCE: true
|
||||
|
||||
};
|
||||
</script><meta name="darkreader" content="426a82ba399d4678839ccd44940c6405"><style class="darkreader darkreader--override" media="screen">.vimvixen-hint {
|
||||
background-color: #7b5300 !important;
|
||||
border-color: #d8b013 !important;
|
||||
color: #f3e8c8 !important;
|
||||
}
|
||||
::placeholder {
|
||||
opacity: 0.5 !important;
|
||||
}
|
||||
a[href="https://coinmarketcap.com/"] > svg[width="94"][height="16"] > path {
|
||||
fill: var(--darkreader-neutral-text) !important;
|
||||
}
|
||||
#edge-translate-panel-body,
|
||||
.MuiTypography-body1 {
|
||||
color: var(--darkreader-neutral-text) !important;
|
||||
}
|
||||
gr-main-header {
|
||||
background-color: #0f3a48 !important;
|
||||
}
|
||||
embed[type="application/pdf"] { filter: invert(100%) contrast(90%); }</style>
|
||||
<script type="text/javascript" src="./Create a package for Windows — Kivy 2.0.0 documentation_files/documentation_options.js.download"></script>
|
||||
<script type="text/javascript" src="./Create a package for Windows — Kivy 2.0.0 documentation_files/jquery.js.download"></script>
|
||||
<script type="text/javascript" src="./Create a package for Windows — Kivy 2.0.0 documentation_files/underscore.js.download"></script>
|
||||
<script type="text/javascript" src="./Create a package for Windows — Kivy 2.0.0 documentation_files/doctools.js.download"></script>
|
||||
<script type="text/javascript" src="./Create a package for Windows — Kivy 2.0.0 documentation_files/jquery-effects-core-and-slide.js.download"></script>
|
||||
<script type="text/javascript" src="./Create a package for Windows — Kivy 2.0.0 documentation_files/jquery.cookie.js.download"></script>
|
||||
<script type="text/javascript" src="./Create a package for Windows — Kivy 2.0.0 documentation_files/kivy.js.download"></script>
|
||||
<link rel="index" title="Index" href="https://kivy.org/doc/stable/genindex.html">
|
||||
<link rel="search" title="Search" href="https://kivy.org/doc/stable/search.html">
|
||||
<link rel="top" title="Kivy 2.0.0 documentation" href="https://kivy.org/doc/stable/index.html">
|
||||
<link rel="up" title="Packaging your application" href="https://kivy.org/doc/stable/guide/packaging.html">
|
||||
<link rel="next" title="Create a package for Android" href="https://kivy.org/doc/stable/guide/packaging-android.html">
|
||||
<link rel="prev" title="Packaging your application" href="https://kivy.org/doc/stable/guide/packaging.html">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="topbar">
|
||||
<div id="topwrapper">
|
||||
<div id="toplogo">
|
||||
<a href="http://kivy.org/">
|
||||
<img src="./Create a package for Windows — Kivy 2.0.0 documentation_files/logo-kivy.png" alt="Kivy" height="50">
|
||||
</a>
|
||||
</div>
|
||||
<div id="topmenu">
|
||||
<ul class="navigation">
|
||||
<li><a class="nav-guides current" href="https://kivy.org/doc/stable/gettingstarted/intro.html">Guides</a></li>
|
||||
<li><a class="nav-garden" href="http://kivy-garden.github.io/">Garden</a></li>
|
||||
<li><a class="nav-api" href="https://kivy.org/doc/stable/api-kivy.html">API Reference</a></li>
|
||||
<li><a class="nav-pdf" href="https://media.readthedocs.org/pdf/kivy/latest/kivy.pdf">PDF</a></li>
|
||||
<li><a class="nav-wiki" href="http://wiki.kivy.org/">Wiki</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="contentall">
|
||||
<div class="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<h3>Version</h3>
|
||||
<select id="version_selector"><option selected="" value="stable">stable</option><option value="master">master</option><option value="stable-1.10.1">stable-1.10.1</option><option value="stable-1.11.0">stable-1.11.0</option><option value="stable-1.11.1">stable-1.11.1</option></select>
|
||||
<h3>Quick search</h3>
|
||||
<form class="search" action="https://kivy.org/doc/stable/search.html" method="get">
|
||||
|
||||
<input type="hidden" name="check_keywords" value="yes">
|
||||
<input type="hidden" name="area" value="default">
|
||||
<input type="text" class="text" name="q">
|
||||
</form>
|
||||
<!--
|
||||
<h3><a href="../index.html">Create a package for Windows</a></h3>
|
||||
<ul>
|
||||
<li><a class="reference internal" href="#">Create a package for Windows</a><ul>
|
||||
<li><a class="reference internal" href="#requirements">Requirements</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#pyinstaller-default-hook">PyInstaller default hook</a><ul>
|
||||
<li><a class="reference internal" href="#packaging-a-simple-app">Packaging a simple app</a></li>
|
||||
<li><a class="reference internal" href="#single-file-application">Single File Application</a></li>
|
||||
<li><a class="reference internal" href="#bundling-data-files">Bundling Data Files</a></li>
|
||||
<li><a class="reference internal" href="#packaging-a-video-app-with-gstreamer">Packaging a video app with gstreamer</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#overwriting-the-default-hook">Overwriting the default hook</a><ul>
|
||||
<li><a class="reference internal" href="#including-excluding-video-and-audio-and-reducing-app-size">Including/excluding video and audio and reducing app size</a></li>
|
||||
<li><a class="reference internal" href="#alternate-installations">Alternate installations</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3><a href="../index.html">Table Of Contents</a></h3>
|
||||
-->
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal mainlevel togglable" href="https://kivy.org/doc/stable/guide/packaging-windows.html#">Getting Started</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/intro.html">Introduction</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/installation.html">Installing Kivy</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/first_app.html">A first App</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/properties.html">Properties</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/rules.html">Kv Design Language</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/events.html">Events</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/framework.html">Non-widget stuff</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/layouts.html">Layouts</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/drawing.html">Drawing</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/packaging.html">Packaging</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/examples.html">Examples</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/diving.html">Diving in</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal mainlevel togglable" href="https://kivy.org/doc/stable/guide/packaging-windows.html#">Gallery of Examples</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gallery.html">Gallery</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__3Drendering__main__py.html">3D Rotating Monkey Head</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__animation__animate__py.html">Widget animation</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__application__app_suite__py.html">Suite of Application Builders</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__application__app_with_build__py.html">Application example using build() + return</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__application__app_with_kv__py.html">Application built from a .kv file</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__application__app_with_kv_in_template1__py.html">Application from a .kv in a Template Directory</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__camera__main__py.html">Camera Example</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__canvas__bezier__py.html">Bezier Example</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__canvas__canvas_stress__py.html">Canvas stress</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__canvas__circle__py.html">Circle Example</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__canvas__fbo_canvas__py.html">FBO Canvas</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__canvas__lines__py.html">Line (SmoothLine) Experiment</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__canvas__lines_extended__py.html">Lines Extended Demo</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__canvas__mesh__py.html">Mesh test</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__canvas__multitexture__py.html">Multitexture Example</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__canvas__repeat_texture__py.html">Repeat Texture on Resize</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__canvas__rotation__py.html">Rotation Example</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__canvas__stencil_canvas__py.html">Stencil demo</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__canvas__tesselate__py.html">Tesselate Demonstration</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__canvas__texture__py.html">Texture Wrapping and Coordinates Example</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__demo__camera_puzzle__py.html">Shuffled Camera Feed Puzzle</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__demo__kivycatalog__main__py.html">Kivy Catalog</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__demo__multistroke__main__py.html">Multistroke Recognition Database Demonstration</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__demo__pictures__main__py.html">Basic Picture Viewer</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__demo__shadereditor__main__py.html">Live Shader Editor</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__demo__showcase__main__py.html">Showcase of Kivy Features</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/examples/gen__demo__touchtracer__main__py.html">Touch Tracer Line Drawing Demonstration</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1"><a class="reference internal mainlevel togglable" href="https://kivy.org/doc/stable/guide/packaging-windows.html#">Getting Started</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/intro.html">Introduction</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/installation.html">Installing Kivy</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/first_app.html">A first App</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/properties.html">Properties</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/rules.html">Kv Design Language</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/events.html">Events</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/framework.html">Non-widget stuff</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/layouts.html">Layouts</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/drawing.html">Drawing</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/packaging.html">Packaging</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/examples.html">Examples</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/gettingstarted/diving.html">Diving in</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal mainlevel togglable" href="https://kivy.org/doc/stable/guide/packaging-windows.html#">Kivy Project</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/philosophy.html">Philosophy</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/contribute.html">Contributing</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/faq.html">FAQ</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/contact.html">Contact Us</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1 current"><a class="reference internal mainlevel togglable" href="https://kivy.org/doc/stable/guide/packaging-windows.html#">Programming Guide</a><ul class="current" style="display: block;">
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/guide/basic.html">Kivy Basics</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/guide/environment.html">Controlling the environment</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/guide/config.html">Configure Kivy</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/guide/architecture.html">Architectural Overview</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/guide/events.html">Events and Properties</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/guide/inputs.html">Input management</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/guide/widgets.html">Widgets</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/guide/graphics.html">Graphics</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/guide/lang.html">Kv language</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/guide/other-frameworks.html">Integrating with other Frameworks</a></li>
|
||||
<li class="toctree-l2 current"><a class="reference internal" href="https://kivy.org/doc/stable/guide/packaging.html">Packaging your application</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/guide/licensing.html">Package licensing</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal mainlevel togglable" href="https://kivy.org/doc/stable/guide/packaging-windows.html#">Tutorials</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/tutorials/pong.html">Pong Game Tutorial</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/tutorials/firstwidget.html">A Simple Paint App</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/tutorials/crashcourse.html">Crash Course</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1" style="display: none;"><a class="reference internal mainlevel togglable" href="https://kivy.org/doc/stable/guide/packaging-windows.html#">API Reference</a><ul class="api-index">
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.html">kivy</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy._version.html">kivy._version</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.animation.html">kivy.animation</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.app.html">kivy.app</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.atlas.html">kivy.atlas</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.base.html">kivy.base</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.cache.html">kivy.cache</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.clock.html">kivy.clock</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.compat.html">kivy.compat</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.config.html">kivy.config</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.context.html">kivy.context</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.core.html">kivy.core</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.core.audio.html">kivy.core.audio</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.core.camera.html">kivy.core.camera</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.core.clipboard.html">kivy.core.clipboard</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.core.gl.html">kivy.core.gl</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.core.image.html">kivy.core.image</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.core.spelling.html">kivy.core.spelling</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.core.text.html">kivy.core.text</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.core.text.markup.html">kivy.core.text.markup</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.core.text.text_layout.html">kivy.core.text.text_layout</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.core.video.html">kivy.core.video</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.core.window.html">kivy.core.window</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.deps.html">kivy.deps</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.effects.html">kivy.effects</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.effects.dampedscroll.html">kivy.effects.dampedscroll</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.effects.kinetic.html">kivy.effects.kinetic</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.effects.opacityscroll.html">kivy.effects.opacityscroll</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.effects.scroll.html">kivy.effects.scroll</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.event.html">kivy.event</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.factory.html">kivy.factory</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.garden.html">kivy.garden</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.geometry.html">kivy.geometry</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.gesture.html">kivy.gesture</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.graphics.html">kivy.graphics</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.graphics.cgl.html">kivy.graphics.cgl</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.graphics.compiler.html">kivy.graphics.compiler</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.graphics.context.html">kivy.graphics.context</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.graphics.context_instructions.html">kivy.graphics.context_instructions</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.graphics.fbo.html">kivy.graphics.fbo</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.graphics.gl_instructions.html">kivy.graphics.gl_instructions</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.graphics.instructions.html">kivy.graphics.instructions</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.graphics.opengl.html">kivy.graphics.opengl</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.graphics.opengl_utils.html">kivy.graphics.opengl_utils</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.graphics.scissor_instructions.html">kivy.graphics.scissor_instructions</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.graphics.shader.html">kivy.graphics.shader</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.graphics.stencil_instructions.html">kivy.graphics.stencil_instructions</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.graphics.svg.html">kivy.graphics.svg</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.graphics.tesselator.html">kivy.graphics.tesselator</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.graphics.texture.html">kivy.graphics.texture</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.graphics.transformation.html">kivy.graphics.transformation</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.html">kivy.input</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.factory.html">kivy.input.factory</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.motionevent.html">kivy.input.motionevent</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.postproc.html">kivy.input.postproc</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.postproc.calibration.html">kivy.input.postproc.calibration</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.postproc.dejitter.html">kivy.input.postproc.dejitter</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.postproc.doubletap.html">kivy.input.postproc.doubletap</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.postproc.ignorelist.html">kivy.input.postproc.ignorelist</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.postproc.retaintouch.html">kivy.input.postproc.retaintouch</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.postproc.tripletap.html">kivy.input.postproc.tripletap</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.provider.html">kivy.input.provider</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.providers.html">kivy.input.providers</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.providers.androidjoystick.html">kivy.input.providers.androidjoystick</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.providers.hidinput.html">kivy.input.providers.hidinput</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.providers.leapfinger.html">kivy.input.providers.leapfinger</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.providers.linuxwacom.html">kivy.input.providers.linuxwacom</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.providers.mactouch.html">kivy.input.providers.mactouch</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.providers.mouse.html">kivy.input.providers.mouse</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.providers.mtdev.html">kivy.input.providers.mtdev</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.providers.probesysfs.html">kivy.input.providers.probesysfs</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.providers.tuio.html">kivy.input.providers.tuio</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.providers.wm_common.html">kivy.input.providers.wm_common</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.recorder.html">kivy.input.recorder</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.input.shape.html">kivy.input.shape</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.interactive.html">kivy.interactive</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.lang.html">kivy.lang</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.lang.builder.html">kivy.lang.builder</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.lang.parser.html">kivy.lang.parser</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.lib.html">kivy.lib</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.lib.ddsfile.html">kivy.lib.ddsfile</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.lib.gstplayer.html">kivy.lib.gstplayer</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.lib.mtdev.html">kivy.lib.mtdev</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.loader.html">kivy.loader</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.logger.html">kivy.logger</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.metrics.html">kivy.metrics</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.modules.html">kivy.modules</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.modules.console.html">kivy.modules.console</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.modules.inspector.html">kivy.modules.inspector</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.modules.joycursor.html">kivy.modules.joycursor</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.modules.keybinding.html">kivy.modules.keybinding</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.modules.monitor.html">kivy.modules.monitor</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.modules.recorder.html">kivy.modules.recorder</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.modules.screen.html">kivy.modules.screen</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.modules.touchring.html">kivy.modules.touchring</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.modules.webdebugger.html">kivy.modules.webdebugger</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.multistroke.html">kivy.multistroke</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.network.html">kivy.network</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.network.urlrequest.html">kivy.network.urlrequest</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.parser.html">kivy.parser</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.properties.html">kivy.properties</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.resources.html">kivy.resources</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.storage.html">kivy.storage</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.storage.dictstore.html">kivy.storage.dictstore</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.storage.jsonstore.html">kivy.storage.jsonstore</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.storage.redisstore.html">kivy.storage.redisstore</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.support.html">kivy.support</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.tools.html">kivy.tools</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.tools.packaging.html">kivy.tools.packaging</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.tools.packaging.pyinstaller_hooks.html">kivy.tools.packaging.pyinstaller_hooks</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.html">kivy.uix</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.accordion.html">kivy.uix.accordion</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.actionbar.html">kivy.uix.actionbar</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.anchorlayout.html">kivy.uix.anchorlayout</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.behaviors.html">kivy.uix.behaviors</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.behaviors.button.html">kivy.uix.behaviors.button</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.behaviors.codenavigation.html">kivy.uix.behaviors.codenavigation</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.behaviors.compoundselection.html">kivy.uix.behaviors.compoundselection</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.behaviors.cover.html">kivy.uix.behaviors.cover</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.behaviors.drag.html">kivy.uix.behaviors.drag</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.behaviors.emacs.html">kivy.uix.behaviors.emacs</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.behaviors.focus.html">kivy.uix.behaviors.focus</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.behaviors.knspace.html">kivy.uix.behaviors.knspace</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.behaviors.togglebutton.html">kivy.uix.behaviors.togglebutton</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.behaviors.touchripple.html">kivy.uix.behaviors.touchripple</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.boxlayout.html">kivy.uix.boxlayout</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.bubble.html">kivy.uix.bubble</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.button.html">kivy.uix.button</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.camera.html">kivy.uix.camera</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.carousel.html">kivy.uix.carousel</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.checkbox.html">kivy.uix.checkbox</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.codeinput.html">kivy.uix.codeinput</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.colorpicker.html">kivy.uix.colorpicker</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.dropdown.html">kivy.uix.dropdown</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.effectwidget.html">kivy.uix.effectwidget</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.filechooser.html">kivy.uix.filechooser</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.floatlayout.html">kivy.uix.floatlayout</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.gesturesurface.html">kivy.uix.gesturesurface</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.gridlayout.html">kivy.uix.gridlayout</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.image.html">kivy.uix.image</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.label.html">kivy.uix.label</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.layout.html">kivy.uix.layout</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.modalview.html">kivy.uix.modalview</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.pagelayout.html">kivy.uix.pagelayout</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.popup.html">kivy.uix.popup</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.progressbar.html">kivy.uix.progressbar</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.recycleboxlayout.html">kivy.uix.recycleboxlayout</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.recyclegridlayout.html">kivy.uix.recyclegridlayout</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.recyclelayout.html">kivy.uix.recyclelayout</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.recycleview.html">kivy.uix.recycleview</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.recycleview.datamodel.html">kivy.uix.recycleview.datamodel</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.recycleview.layout.html">kivy.uix.recycleview.layout</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.recycleview.views.html">kivy.uix.recycleview.views</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.relativelayout.html">kivy.uix.relativelayout</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.rst.html">kivy.uix.rst</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.sandbox.html">kivy.uix.sandbox</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.scatter.html">kivy.uix.scatter</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.scatterlayout.html">kivy.uix.scatterlayout</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.screenmanager.html">kivy.uix.screenmanager</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.scrollview.html">kivy.uix.scrollview</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.settings.html">kivy.uix.settings</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.slider.html">kivy.uix.slider</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.spinner.html">kivy.uix.spinner</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.splitter.html">kivy.uix.splitter</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.stacklayout.html">kivy.uix.stacklayout</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.stencilview.html">kivy.uix.stencilview</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.switch.html">kivy.uix.switch</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.tabbedpanel.html">kivy.uix.tabbedpanel</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.textinput.html">kivy.uix.textinput</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.togglebutton.html">kivy.uix.togglebutton</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.treeview.html">kivy.uix.treeview</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.video.html">kivy.uix.video</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.videoplayer.html">kivy.uix.videoplayer</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.vkeyboard.html">kivy.uix.vkeyboard</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.uix.widget.html">kivy.uix.widget</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.utils.html">kivy.utils</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.vector.html">kivy.vector</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.weakmethod.html">kivy.weakmethod</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.weakproxy.html">kivy.weakproxy</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!--
|
||||
<h3>Related Topics</h3>
|
||||
<ul>
|
||||
<li>Previous: <a href="packaging.html" title="previous chapter">Packaging your application</a></li>
|
||||
<li>Next: <a href="packaging-android.html" title="next chapter">Create a package for Android</a></li>
|
||||
</ul>
|
||||
-->
|
||||
</div>
|
||||
</div>
|
||||
<div id="content" style="min-height: 4327.45px;">
|
||||
<div class="wrapper">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body">
|
||||
<div class="toc"><h2>Table Of Contents</h2><ul>
|
||||
<li><a class="reference internal" href="https://kivy.org/doc/stable/guide/packaging-windows.html#">Create a package for Windows</a><ul>
|
||||
<li><a class="reference internal" href="https://kivy.org/doc/stable/guide/packaging-windows.html#requirements">Requirements</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="https://kivy.org/doc/stable/guide/packaging-windows.html#pyinstaller-default-hook">PyInstaller default hook</a><ul>
|
||||
<li><a class="reference internal" href="https://kivy.org/doc/stable/guide/packaging-windows.html#packaging-a-simple-app">Packaging a simple app</a></li>
|
||||
<li><a class="reference internal" href="https://kivy.org/doc/stable/guide/packaging-windows.html#single-file-application">Single File Application</a></li>
|
||||
<li><a class="reference internal" href="https://kivy.org/doc/stable/guide/packaging-windows.html#bundling-data-files">Bundling Data Files</a></li>
|
||||
<li><a class="reference internal" href="https://kivy.org/doc/stable/guide/packaging-windows.html#packaging-a-video-app-with-gstreamer">Packaging a video app with gstreamer</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="https://kivy.org/doc/stable/guide/packaging-windows.html#overwriting-the-default-hook">Overwriting the default hook</a><ul>
|
||||
<li><a class="reference internal" href="https://kivy.org/doc/stable/guide/packaging-windows.html#including-excluding-video-and-audio-and-reducing-app-size">Including/excluding video and audio and reducing app size</a></li>
|
||||
<li><a class="reference internal" href="https://kivy.org/doc/stable/guide/packaging-windows.html#alternate-installations">Alternate installations</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<section id="create-a-package-for-windows">
|
||||
<span id="packaging-win"></span><h1>Programming Guide » Create a package for Windows<a class="headerlink" href="https://kivy.org/doc/stable/guide/packaging-windows.html#create-a-package-for-windows" title="Permalink to this headline">¶</a></h1>
|
||||
<div class="admonition note">
|
||||
<p class="admonition-title">Note</p>
|
||||
<p>This document only applies for kivy <code class="docutils literal notranslate"><span class="pre">1.9.1</span></code> and greater.</p>
|
||||
</div>
|
||||
<p>Packaging your application for the Windows platform can only be done inside the
|
||||
Windows OS. The following process has been tested on Windows with the Kivy
|
||||
<strong>wheels</strong> installation, see at the end for alternate installations.</p>
|
||||
<p>The package will be either 32 or 64 bits depending on which version of Python
|
||||
you ran it with.</p>
|
||||
<section id="requirements">
|
||||
<span id="packaging-windows-requirements"></span><h2>Requirements<a class="headerlink" href="https://kivy.org/doc/stable/guide/packaging-windows.html#requirements" title="Permalink to this headline">¶</a></h2>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
<li><p>Latest Kivy (installed as described in <a class="reference internal" href="https://kivy.org/doc/stable/installation/installation-windows.html#installation-windows"><span class="std std-ref">Installation on Windows</span></a>).</p></li>
|
||||
<li><p>PyInstaller 3.1+ (<code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">--upgrade</span> <span class="pre">pyinstaller</span></code>).</p></li>
|
||||
</ul>
|
||||
</div></blockquote>
|
||||
</section>
|
||||
</section>
|
||||
<section id="pyinstaller-default-hook">
|
||||
<span id="create-the-spec-file"></span><h1>PyInstaller default hook<a class="headerlink" href="https://kivy.org/doc/stable/guide/packaging-windows.html#pyinstaller-default-hook" title="Permalink to this headline">¶</a></h1>
|
||||
<p>This section applies to PyInstaller (>= 3.1) that includes the kivy hooks.
|
||||
To overwrite the default hook the
|
||||
following examples need to be slightly modified. See <a class="reference internal" href="https://kivy.org/doc/stable/guide/packaging-windows.html#overwrite-win-hook"><span class="std std-ref">Overwriting the default hook</span></a>.</p>
|
||||
<section id="packaging-a-simple-app">
|
||||
<h2>Packaging a simple app<a class="headerlink" href="https://kivy.org/doc/stable/guide/packaging-windows.html#packaging-a-simple-app" title="Permalink to this headline">¶</a></h2>
|
||||
<p>For this example, we’ll package the <strong>touchtracer</strong> example project and embed
|
||||
a custom icon. The location of the kivy examples is, when using the wheels,
|
||||
installed to <code class="docutils literal notranslate"><span class="pre">python\\share\\kivy-examples</span></code> and when using the github source
|
||||
code installed as <code class="docutils literal notranslate"><span class="pre">kivy\\examples</span></code>. We’ll just refer to the full path leading
|
||||
to the examples as <code class="docutils literal notranslate"><span class="pre">examples-path</span></code>. The touchtracer example is in
|
||||
<code class="docutils literal notranslate"><span class="pre">examples-path\\demo\\touchtracer</span></code> and the main file is named <code class="docutils literal notranslate"><span class="pre">main.py</span></code>.</p>
|
||||
<ol class="arabic">
|
||||
<li><p>Open your command line shell and ensure that python is on the path (i.e.
|
||||
<code class="docutils literal notranslate"><span class="pre">python</span></code> works).</p></li>
|
||||
<li><p>Create a folder into which the packaged app will be created. For example
|
||||
create a <code class="docutils literal notranslate"><span class="pre">TouchApp</span></code> folder and <a class="reference external" href="http://www.computerhope.com/cdhlp.htm">change to that directory</a> with e.g. <code class="docutils literal notranslate"><span class="pre">cd</span> <span class="pre">TouchApp</span></code>.
|
||||
Then type:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="o">-</span><span class="n">m</span> <span class="n">PyInstaller</span> <span class="o">--</span><span class="n">name</span> <span class="n">touchtracer</span> <span class="n">examples</span><span class="o">-</span><span class="n">path</span>\<span class="n">demo</span>\<span class="n">touchtracer</span>\<span class="n">main</span><span class="o">.</span><span class="n">py</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>You can also add an <cite>icon.ico</cite> file to the application folder in order to
|
||||
create an icon for the executable. If you don’t have a .ico file available,
|
||||
you can convert your <cite>icon.png</cite> file to ico using the web app
|
||||
<a class="reference external" href="http://www.convertico.com/">ConvertICO</a>. Save the <cite>icon.ico</cite> in the
|
||||
touchtracer directory and type:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="o">-</span><span class="n">m</span> <span class="n">PyInstaller</span> <span class="o">--</span><span class="n">name</span> <span class="n">touchtracer</span> <span class="o">--</span><span class="n">icon</span> <span class="n">examples</span><span class="o">-</span><span class="n">path</span>\<span class="n">demo</span>\<span class="n">touchtracer</span>\<span class="n">icon</span><span class="o">.</span><span class="n">ico</span> <span class="n">examples</span><span class="o">-</span><span class="n">path</span>\<span class="n">demo</span>\<span class="n">touchtracer</span>\<span class="n">main</span><span class="o">.</span><span class="n">py</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>For more options, please consult the
|
||||
<a class="reference external" href="http://pythonhosted.org/PyInstaller/">PyInstaller Manual</a>.</p>
|
||||
</li>
|
||||
<li><p>The spec file will be <code class="docutils literal notranslate"><span class="pre">touchtracer.spec</span></code> located in <code class="docutils literal notranslate"><span class="pre">TouchApp</span></code>. Now we
|
||||
need to edit the spec file to add the dependencies hooks to correctly build
|
||||
the exe. Open the spec file with your favorite editor and add these lines
|
||||
at the beginning of the spec (assuming sdl2 is used, the default now):</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">kivy_deps</span> <span class="kn">import</span> <span class="n">sdl2</span><span class="p">,</span> <span class="n">glew</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Then, find <code class="docutils literal notranslate"><span class="pre">COLLECT()</span></code> and add the data for touchtracer
|
||||
(<cite>touchtracer.kv</cite>, <cite>particle.png</cite>, …): Change the line to add a <code class="docutils literal notranslate"><span class="pre">Tree()</span></code>
|
||||
object, e.g. <code class="docutils literal notranslate"><span class="pre">Tree('examples-path\\demo\\touchtracer\\')</span></code>. This Tree will
|
||||
search and add every file found in the touchtracer directory to your final
|
||||
package.</p>
|
||||
<p>To add the dependencies, before the first keyword argument in COLLECT add a
|
||||
Tree object for every path of the dependencies. E.g.
|
||||
<code class="docutils literal notranslate"><span class="pre">*[Tree(p)</span> <span class="pre">for</span> <span class="pre">p</span> <span class="pre">in</span> <span class="pre">(sdl2.dep_bins</span> <span class="pre">+</span> <span class="pre">glew.dep_bins)]</span></code> so it’ll look
|
||||
something like:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">coll</span> <span class="o">=</span> <span class="n">COLLECT</span><span class="p">(</span><span class="n">exe</span><span class="p">,</span> <span class="n">Tree</span><span class="p">(</span><span class="s1">'examples-path</span><span class="se">\\</span><span class="s1">demo</span><span class="se">\\</span><span class="s1">touchtracer</span><span class="se">\\</span><span class="s1">'</span><span class="p">),</span>
|
||||
<span class="n">a</span><span class="o">.</span><span class="n">binaries</span><span class="p">,</span>
|
||||
<span class="n">a</span><span class="o">.</span><span class="n">zipfiles</span><span class="p">,</span>
|
||||
<span class="n">a</span><span class="o">.</span><span class="n">datas</span><span class="p">,</span>
|
||||
<span class="o">*</span><span class="p">[</span><span class="n">Tree</span><span class="p">(</span><span class="n">p</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="p">(</span><span class="n">sdl2</span><span class="o">.</span><span class="n">dep_bins</span> <span class="o">+</span> <span class="n">glew</span><span class="o">.</span><span class="n">dep_bins</span><span class="p">)],</span>
|
||||
<span class="n">strip</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">upx</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
<span class="n">name</span><span class="o">=</span><span class="s1">'touchtracer'</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p>Now we build the spec file in <code class="docutils literal notranslate"><span class="pre">TouchApp</span></code> with:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="o">-</span><span class="n">m</span> <span class="n">PyInstaller</span> <span class="n">touchtracer</span><span class="o">.</span><span class="n">spec</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p>The compiled package will be in the <cite>TouchApp\dist\touchtracer</cite> directory.</p></li>
|
||||
</ol>
|
||||
</section>
|
||||
<section id="single-file-application">
|
||||
<h2>Single File Application<a class="headerlink" href="https://kivy.org/doc/stable/guide/packaging-windows.html#single-file-application" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Next, we will modify the example above to package the <strong>touchtracer</strong> example project as a single file application. Following the same steps as above, instead issue the following command:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="o">-</span><span class="n">m</span> <span class="n">PyInstaller</span> <span class="o">--</span><span class="n">onefile</span> <span class="o">--</span><span class="n">name</span> <span class="n">touchtracer</span> <span class="n">examples</span><span class="o">-</span><span class="n">path</span>\<span class="n">demo</span>\<span class="n">touchtracer</span>\<span class="n">main</span><span class="o">.</span><span class="n">py</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<ol class="arabic">
|
||||
<li><p>As before, this will generate touchtracer.spec, which we will edit to add the dependencies. In this instance, edit the arguments to the EXE command so that it will look something like this:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">exe</span> <span class="o">=</span> <span class="n">EXE</span><span class="p">(</span><span class="n">pyz</span><span class="p">,</span> <span class="n">Tree</span><span class="p">(</span><span class="s1">'examples-path</span><span class="se">\\</span><span class="s1">demo</span><span class="se">\\</span><span class="s1">touchtracer</span><span class="se">\\</span><span class="s1">'</span><span class="p">),</span>
|
||||
<span class="n">a</span><span class="o">.</span><span class="n">scripts</span><span class="p">,</span>
|
||||
<span class="n">a</span><span class="o">.</span><span class="n">binaries</span><span class="p">,</span>
|
||||
<span class="n">a</span><span class="o">.</span><span class="n">zipfiles</span><span class="p">,</span>
|
||||
<span class="n">a</span><span class="o">.</span><span class="n">datas</span><span class="p">,</span>
|
||||
<span class="o">*</span><span class="p">[</span><span class="n">Tree</span><span class="p">(</span><span class="n">p</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="p">(</span><span class="n">sdl2</span><span class="o">.</span><span class="n">dep_bins</span> <span class="o">+</span> <span class="n">glew</span><span class="o">.</span><span class="n">dep_bins</span><span class="p">)],</span>
|
||||
<span class="n">upx</span><span class="o">=</span><span class="kc">True</span>
|
||||
<span class="n">name</span><span class="o">=</span><span class="s1">'touchtracer'</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p>Now you can build the spec file as before with:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="o">-</span><span class="n">m</span> <span class="n">PyInstaller</span> <span class="n">touchtracer</span><span class="o">.</span><span class="n">spec</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p>The compiled package will be in the <cite>TouchApp\dist</cite> directory and will consist of a single executable file.</p></li>
|
||||
</ol>
|
||||
</section>
|
||||
<section id="bundling-data-files">
|
||||
<h2>Bundling Data Files<a class="headerlink" href="https://kivy.org/doc/stable/guide/packaging-windows.html#bundling-data-files" title="Permalink to this headline">¶</a></h2>
|
||||
<p>We will again modify the previous example to include bundled data files. PyInstaller allows inclusion of outside data files (such as images, databases, etc) that the project needs to run. When running an app on Windows, the executable extracts to a temporary folder which the Kivy project doesn’t know about, so it can’t locate these data files. We can fix that with a few lines.</p>
|
||||
<ol class="arabic">
|
||||
<li><p>First, follow PyInstaller documentation on how to include data files in your application.</p></li>
|
||||
<li><p>Modify your main python code to include the following imports (if it doesn’t have them already):</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">sys</span>
|
||||
<span class="kn">from</span> <span class="nn">kivy.resources</span> <span class="kn">import</span> <span class="n">resource_add_path</span><span class="p">,</span> <span class="n">resource_find</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p>Modify your main python code to include the following (using the <strong>touchtracer</strong> app as an example):</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">sys</span><span class="p">,</span> <span class="s1">'_MEIPASS'</span><span class="p">):</span>
|
||||
<span class="n">resource_add_path</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">_MEIPASS</span><span class="p">))</span>
|
||||
<span class="n">TouchtracerApp</span><span class="p">()</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p>Finally, follow the steps for bundling your application above.</p></li>
|
||||
</ol>
|
||||
</section>
|
||||
<section id="packaging-a-video-app-with-gstreamer">
|
||||
<h2>Packaging a video app with gstreamer<a class="headerlink" href="https://kivy.org/doc/stable/guide/packaging-windows.html#packaging-a-video-app-with-gstreamer" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Following we’ll slightly modify the example above to package a app that uses
|
||||
gstreamer for video. We’ll use the <code class="docutils literal notranslate"><span class="pre">videoplayer</span></code> example found at
|
||||
<code class="docutils literal notranslate"><span class="pre">examples-path\widgets\videoplayer.py</span></code>. Create a folder somewhere called
|
||||
<code class="docutils literal notranslate"><span class="pre">VideoPlayer</span></code> and on the command line change your current directory to that
|
||||
folder and do:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="o">-</span><span class="n">m</span> <span class="n">PyInstaller</span> <span class="o">--</span><span class="n">name</span> <span class="n">gstvideo</span> <span class="n">examples</span><span class="o">-</span><span class="n">path</span>\<span class="n">widgets</span>\<span class="n">videoplayer</span><span class="o">.</span><span class="n">py</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>to create the <code class="docutils literal notranslate"><span class="pre">gstvideo.spec</span></code> file. Edit as above and this time include the
|
||||
gstreamer dependency as well:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">kivy_deps</span> <span class="kn">import</span> <span class="n">sdl2</span><span class="p">,</span> <span class="n">glew</span><span class="p">,</span> <span class="n">gstreamer</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>and add the <code class="docutils literal notranslate"><span class="pre">Tree()</span></code> to include the video files, e.g.
|
||||
<code class="docutils literal notranslate"><span class="pre">Tree('examples-path\\widgets')</span></code> as well as the gstreamer dependencies so it
|
||||
should look something like:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">coll</span> <span class="o">=</span> <span class="n">COLLECT</span><span class="p">(</span><span class="n">exe</span><span class="p">,</span> <span class="n">Tree</span><span class="p">(</span><span class="s1">'examples-path</span><span class="se">\\</span><span class="s1">widgets'</span><span class="p">),</span>
|
||||
<span class="n">a</span><span class="o">.</span><span class="n">binaries</span><span class="p">,</span>
|
||||
<span class="n">a</span><span class="o">.</span><span class="n">zipfiles</span><span class="p">,</span>
|
||||
<span class="n">a</span><span class="o">.</span><span class="n">datas</span><span class="p">,</span>
|
||||
<span class="o">*</span><span class="p">[</span><span class="n">Tree</span><span class="p">(</span><span class="n">p</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="p">(</span><span class="n">sdl2</span><span class="o">.</span><span class="n">dep_bins</span> <span class="o">+</span> <span class="n">glew</span><span class="o">.</span><span class="n">dep_bins</span> <span class="o">+</span> <span class="n">gstreamer</span><span class="o">.</span><span class="n">dep_bins</span><span class="p">)],</span>
|
||||
<span class="n">strip</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">upx</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
<span class="n">name</span><span class="o">=</span><span class="s1">'gstvideo'</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Then build the spec file in <code class="docutils literal notranslate"><span class="pre">VideoPlayer</span></code> with:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="o">-</span><span class="n">m</span> <span class="n">PyInstaller</span> <span class="n">gstvideo</span><span class="o">.</span><span class="n">spec</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>and you should find gstvideo.exe in <code class="docutils literal notranslate"><span class="pre">VideoPlayer\dist\gstvideo</span></code>,
|
||||
which when run will play a video.</p>
|
||||
<div class="admonition note">
|
||||
<p class="admonition-title">Note</p>
|
||||
<p>If you’re using Pygame and need PyGame in your packaging app, you’ll have
|
||||
to add the following code to your spec file due to kivy issue #1638. After
|
||||
the imports add the following:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">getResource</span><span class="p">(</span><span class="n">identifier</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">identifier</span> <span class="o">==</span> <span class="s1">'pygame_icon.tiff'</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">IOError</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">_original_getResource</span><span class="p">(</span><span class="n">identifier</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">pygame.pkgdata</span>
|
||||
<span class="n">_original_getResource</span> <span class="o">=</span> <span class="n">pygame</span><span class="o">.</span><span class="n">pkgdata</span><span class="o">.</span><span class="n">getResource</span>
|
||||
<span class="n">pygame</span><span class="o">.</span><span class="n">pkgdata</span><span class="o">.</span><span class="n">getResource</span> <span class="o">=</span> <span class="n">getResource</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
<section id="overwriting-the-default-hook">
|
||||
<span id="overwrite-win-hook"></span><h1>Overwriting the default hook<a class="headerlink" href="https://kivy.org/doc/stable/guide/packaging-windows.html#overwriting-the-default-hook" title="Permalink to this headline">¶</a></h1>
|
||||
<section id="including-excluding-video-and-audio-and-reducing-app-size">
|
||||
<h2>Including/excluding video and audio and reducing app size<a class="headerlink" href="https://kivy.org/doc/stable/guide/packaging-windows.html#including-excluding-video-and-audio-and-reducing-app-size" title="Permalink to this headline">¶</a></h2>
|
||||
<p>PyInstaller includes a hook for kivy that by default adds <strong>all</strong> the core
|
||||
modules used by kivy, e.g. audio, video, spelling etc (you still need to
|
||||
package the gstreamer dlls manually with <code class="docutils literal notranslate"><span class="pre">Tree()</span></code> - see the example above)
|
||||
and their dependencies. If the hook is not installed or to reduce app size some
|
||||
of these modules may be excluded, e.g. if no audio/video is used, with
|
||||
an alternative hook.</p>
|
||||
<p>Kivy provides the alternate hook at
|
||||
<a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.tools.packaging.pyinstaller_hooks.html#kivy.tools.packaging.pyinstaller_hooks.hookspath" title="kivy.tools.packaging.pyinstaller_hooks.hookspath"><code class="xref py py-func docutils literal notranslate"><span class="pre">hookspath()</span></code></a>. In addition, if and
|
||||
only if PyInstaller doesn’t have the default hooks
|
||||
<a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.tools.packaging.pyinstaller_hooks.html#kivy.tools.packaging.pyinstaller_hooks.runtime_hooks" title="kivy.tools.packaging.pyinstaller_hooks.runtime_hooks"><code class="xref py py-func docutils literal notranslate"><span class="pre">runtime_hooks()</span></code></a> must also be
|
||||
provided. When overwriting the hook, the latter one typically is not required
|
||||
to be overwritten.</p>
|
||||
<p>The alternate <a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.tools.packaging.pyinstaller_hooks.html#kivy.tools.packaging.pyinstaller_hooks.hookspath" title="kivy.tools.packaging.pyinstaller_hooks.hookspath"><code class="xref py py-func docutils literal notranslate"><span class="pre">hookspath()</span></code></a> hook
|
||||
does not include any of the kivy providers. To add them, they have to be added
|
||||
with
|
||||
<a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.tools.packaging.pyinstaller_hooks.html#kivy.tools.packaging.pyinstaller_hooks.get_deps_minimal" title="kivy.tools.packaging.pyinstaller_hooks.get_deps_minimal"><code class="xref py py-func docutils literal notranslate"><span class="pre">get_deps_minimal()</span></code></a> or
|
||||
<a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.tools.packaging.pyinstaller_hooks.html#kivy.tools.packaging.pyinstaller_hooks.get_deps_all" title="kivy.tools.packaging.pyinstaller_hooks.get_deps_all"><code class="xref py py-func docutils literal notranslate"><span class="pre">get_deps_all()</span></code></a>. See
|
||||
their documentation and <a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.tools.packaging.pyinstaller_hooks.html#module-kivy.tools.packaging.pyinstaller_hooks" title="kivy.tools.packaging.pyinstaller_hooks"><code class="xref py py-mod docutils literal notranslate"><span class="pre">pyinstaller_hooks</span></code></a> for more
|
||||
details. But essentially,
|
||||
<a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.tools.packaging.pyinstaller_hooks.html#kivy.tools.packaging.pyinstaller_hooks.get_deps_all" title="kivy.tools.packaging.pyinstaller_hooks.get_deps_all"><code class="xref py py-func docutils literal notranslate"><span class="pre">get_deps_all()</span></code></a> add all the
|
||||
providers like in the default hook while
|
||||
<a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.tools.packaging.pyinstaller_hooks.html#kivy.tools.packaging.pyinstaller_hooks.get_deps_minimal" title="kivy.tools.packaging.pyinstaller_hooks.get_deps_minimal"><code class="xref py py-func docutils literal notranslate"><span class="pre">get_deps_minimal()</span></code></a> only adds
|
||||
those that are loaded when the app is run. Each method provides a list of
|
||||
hidden kivy imports and excluded imports that can be passed on to <code class="docutils literal notranslate"><span class="pre">Analysis</span></code>.</p>
|
||||
<p>One can also generate a alternate hook which literally lists every kivy
|
||||
provider module and those not required can be commented out. See
|
||||
<a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.tools.packaging.pyinstaller_hooks.html#module-kivy.tools.packaging.pyinstaller_hooks" title="kivy.tools.packaging.pyinstaller_hooks"><code class="xref py py-mod docutils literal notranslate"><span class="pre">pyinstaller_hooks</span></code></a>.</p>
|
||||
<p>To use the the alternate hooks with the examples above modify as following to
|
||||
add the hooks with <code class="docutils literal notranslate"><span class="pre">hookspath()</span></code> and <code class="docutils literal notranslate"><span class="pre">runtime_hooks</span></code> (if required)
|
||||
and <code class="docutils literal notranslate"><span class="pre">**get_deps_minimal()</span></code> or <code class="docutils literal notranslate"><span class="pre">**get_deps_all()</span></code> to specify the providers.</p>
|
||||
<p>For example, add the import statement:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">kivy.tools.packaging.pyinstaller_hooks</span> <span class="kn">import</span> <span class="n">get_deps_minimal</span><span class="p">,</span> <span class="n">get_deps_all</span><span class="p">,</span> <span class="n">hookspath</span><span class="p">,</span> <span class="n">runtime_hooks</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>and then modify <code class="docutils literal notranslate"><span class="pre">Analysis</span></code> as follows:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">a</span> <span class="o">=</span> <span class="n">Analysis</span><span class="p">([</span><span class="s1">'examples-path</span><span class="se">\\</span><span class="s1">demo</span><span class="se">\\</span><span class="s1">touchtracer</span><span class="se">\\</span><span class="s1">main.py'</span><span class="p">],</span>
|
||||
<span class="o">...</span>
|
||||
<span class="n">hookspath</span><span class="o">=</span><span class="n">hookspath</span><span class="p">(),</span>
|
||||
<span class="n">runtime_hooks</span><span class="o">=</span><span class="n">runtime_hooks</span><span class="p">(),</span>
|
||||
<span class="o">...</span>
|
||||
<span class="o">**</span><span class="n">get_deps_all</span><span class="p">())</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>to include everything like the default hook. Or:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">a</span> <span class="o">=</span> <span class="n">Analysis</span><span class="p">([</span><span class="s1">'examples-path</span><span class="se">\\</span><span class="s1">demo</span><span class="se">\\</span><span class="s1">touchtracer</span><span class="se">\\</span><span class="s1">main.py'</span><span class="p">],</span>
|
||||
<span class="o">...</span>
|
||||
<span class="n">hookspath</span><span class="o">=</span><span class="n">hookspath</span><span class="p">(),</span>
|
||||
<span class="n">runtime_hooks</span><span class="o">=</span><span class="n">runtime_hooks</span><span class="p">(),</span>
|
||||
<span class="o">...</span>
|
||||
<span class="o">**</span><span class="n">get_deps_minimal</span><span class="p">(</span><span class="n">video</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">audio</span><span class="o">=</span><span class="kc">None</span><span class="p">))</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>e.g. to exclude the audio and video providers and for the other core modules
|
||||
only use those loaded.</p>
|
||||
<p>The key points is to provide the alternate
|
||||
<a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.tools.packaging.pyinstaller_hooks.html#kivy.tools.packaging.pyinstaller_hooks.hookspath" title="kivy.tools.packaging.pyinstaller_hooks.hookspath"><code class="xref py py-func docutils literal notranslate"><span class="pre">hookspath()</span></code></a> which does not list
|
||||
by default all the kivy providers and instead manually to hiddenimports
|
||||
add the required providers while removing the undesired ones (audio and
|
||||
video in this example) with
|
||||
<a class="reference internal" href="https://kivy.org/doc/stable/api-kivy.tools.packaging.pyinstaller_hooks.html#kivy.tools.packaging.pyinstaller_hooks.get_deps_minimal" title="kivy.tools.packaging.pyinstaller_hooks.get_deps_minimal"><code class="xref py py-func docutils literal notranslate"><span class="pre">get_deps_minimal()</span></code></a>.</p>
|
||||
</section>
|
||||
<section id="alternate-installations">
|
||||
<h2>Alternate installations<a class="headerlink" href="https://kivy.org/doc/stable/guide/packaging-windows.html#alternate-installations" title="Permalink to this headline">¶</a></h2>
|
||||
<p>The previous examples used e.g.
|
||||
<code class="docutils literal notranslate"><span class="pre">*[Tree(p)</span> <span class="pre">for</span> <span class="pre">p</span> <span class="pre">in</span> <span class="pre">(sdl2.dep_bins</span> <span class="pre">+</span> <span class="pre">glew.dep_bins</span> <span class="pre">+</span> <span class="pre">gstreamer.dep_bins)],</span></code>
|
||||
to make PyInstaller add all the dlls used by these dependencies. If kivy
|
||||
was not installed using the wheels method these commands will not work and e.g.
|
||||
<code class="docutils literal notranslate"><span class="pre">kivy_deps.sdl2</span></code> will fail to import. Instead, one must find the location
|
||||
of these dlls and manually pass them to the <code class="docutils literal notranslate"><span class="pre">Tree</span></code> class in a similar fashion
|
||||
as the example.</p>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
|
||||
<div class="footerlinks">
|
||||
<table>
|
||||
<tbody><tr>
|
||||
<td class="leftlink">
|
||||
<a href="https://kivy.org/doc/stable/guide/packaging.html" title="previous chapter">« Packaging your application</a>
|
||||
</td>
|
||||
<td class="rightlink">
|
||||
<a href="https://kivy.org/doc/stable/guide/packaging-android.html" title="next chapter">Create a package for Android »</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Piwik -->
|
||||
<script>
|
||||
var _paq = _paq || [];
|
||||
_paq.push(['setDomains', '*.kivy.org']);
|
||||
_paq.push(['setCookieDomain', '*.kivy.org']);
|
||||
_paq.push(['enableHeartBeatTimer', 60]);
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="//pw.kivy.org/";
|
||||
_paq.push(['setTrackerUrl', u+'pw.php']);
|
||||
_paq.push(['setSiteId', 4]);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'pw.js'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
</script>
|
||||
<script>
|
||||
var selector = $("#version_selector");
|
||||
|
||||
selector.on('change', function() {
|
||||
// replace the version part of the url with the selected version
|
||||
document.location.pathname = document.location.pathname.replace(
|
||||
/^(\/.*?\/).*?(\/.*)/,
|
||||
'$1' + this.value + '$2'
|
||||
);
|
||||
});
|
||||
|
||||
var url = "/doc/versions.json";
|
||||
|
||||
$.getJSON(url, function(versions) {
|
||||
versions.forEach(function(version){
|
||||
var current = window.location.pathname.split('/')[2]
|
||||
selector.append(
|
||||
$("<option " + (version == current ? "selected" : "") + "/>").val(version).html(version)
|
||||
);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<noscript><p><img src="//pw.kivy.org/pw.php?idsite=4&rec=1" style="border:0;" alt="" /></p></noscript>
|
||||
<!-- End Piwik Tracking Code -->
|
||||
<!--
|
||||
<div class="footer">
|
||||
© Copyright 2010, The Kivy Authors.
|
||||
Last updated on Nov 10, 2021.
|
||||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 4.2.0.
|
||||
</div>
|
||||
-->
|
||||
|
||||
</body></html>
|
||||
@@ -1,31 +0,0 @@
|
||||
|
||||
_____ _ _
|
||||
/ ____| | | |
|
||||
| | | |__ __ _ _ __ __ _ ___ | | ___ __ _
|
||||
| | | '_ \ / _` | '_ \ / _` |/ _ \ | | / _ \ / _` |
|
||||
| |____| | | | (_| | | | | (_| | __/ | |___| (_) | (_| |
|
||||
\_____|_| |_|\__,_|_| |_|\__, |\___| |______\___/ \__, |
|
||||
__/ | __/ |
|
||||
|___/ |___/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Beeps V1.0 - 05/03/2021
|
||||
|
||||
- Initial release
|
||||
|
||||
Beeps V2.0 - xx/xx/2021
|
||||
|
||||
Beeps V2.1 - xx/xx/2021
|
||||
|
||||
Beeps V2.2 - 05/07/2023
|
||||
|
||||
- Fixed a bug where the 'always on top' feature didn't work when you had multiple beeps open.
|
||||
|
||||
Beeps V2.3 - 11/07/2023
|
||||
|
||||
- Variables are now read in through a Configuration.ini
|
||||
- Customisable timing thresholds and strings
|
||||
- Better error handling when the beep log cannot be reached
|
||||
@@ -1,15 +0,0 @@
|
||||
[GENERAL]
|
||||
BeepDetailsDirectory = \\192.168.0.133\RealTimeTennis\DataBridge1\Logs\BounceDetails_1.log
|
||||
CourtName = CHANGE ME
|
||||
|
||||
[THRESHOLDS]
|
||||
Thresh1 = 120
|
||||
Thresh1str = Cheating?
|
||||
Thresh2 = 150
|
||||
Thresh2str = Looking good
|
||||
Thresh3 = 250
|
||||
Thresh3str = Little slow
|
||||
Thresh4 = 350
|
||||
Thresh4str = Noticeable slow
|
||||
Thresh5 = 351
|
||||
Thresh5str = Help!!!
|
||||
-327
@@ -1,327 +0,0 @@
|
||||
import kivy
|
||||
import time
|
||||
from kivy.app import App
|
||||
from kivy.uix.boxlayout import BoxLayout
|
||||
from kivy.uix.label import Label
|
||||
from kivy.clock import Clock
|
||||
from kivy.lang import Builder
|
||||
from kivy.properties import StringProperty
|
||||
from kivy.core.window import Window
|
||||
from kivy.config import Config
|
||||
from tkinter import filedialog
|
||||
from tkinter import simpledialog
|
||||
from KivyOnTop import register_topmost, unregister_topmost
|
||||
import configparser
|
||||
|
||||
|
||||
|
||||
from tkinter import *
|
||||
|
||||
#Configuration loading
|
||||
|
||||
config = configparser.ConfigParser()
|
||||
config.read('Configuration.ini')
|
||||
|
||||
# Accessing variables from the 'GENERAL' section
|
||||
Court_name = str(config['GENERAL']['CourtName'])
|
||||
filePath = str(config['GENERAL']['BeepDetailsDirectory'])
|
||||
print(filePath)
|
||||
if filePath == "\\\\0.0.0.0\\RealTimeTennis\\DataBridge1\\Logs\\BounceDetails_1.log":
|
||||
print(chr(27) + "[2J")
|
||||
print("##################################################")
|
||||
print("You have not changed the default Configuration.ini")
|
||||
print("Please change the IP")
|
||||
print("##################################################")
|
||||
input()
|
||||
exit()
|
||||
|
||||
|
||||
|
||||
# Accessing variables from the 'THRESHOLDS' section
|
||||
Thresh1 = int(config['THRESHOLDS']['Thresh1'])
|
||||
Thresh2 = int(config['THRESHOLDS']['Thresh2'])
|
||||
Thresh3 = int(config['THRESHOLDS']['Thresh3'])
|
||||
Thresh4 = int(config['THRESHOLDS']['Thresh4'])
|
||||
Thresh5 = int(config['THRESHOLDS']['Thresh5'])
|
||||
|
||||
|
||||
Thresh1str = str(config['THRESHOLDS']['Thresh1str'])
|
||||
Thresh2str = str(config['THRESHOLDS']['Thresh2str'])
|
||||
Thresh3str = str(config['THRESHOLDS']['Thresh3str'])
|
||||
Thresh4str = str(config['THRESHOLDS']['Thresh4str'])
|
||||
Thresh5str = str(config['THRESHOLDS']['Thresh5str'])
|
||||
|
||||
|
||||
|
||||
|
||||
root = Tk()
|
||||
root.withdraw()
|
||||
|
||||
|
||||
print("Court Name: " + Court_name)
|
||||
|
||||
print("BeepDetails Directory: "+ filePath)
|
||||
|
||||
|
||||
|
||||
Builder.load_string("""
|
||||
<MySec>:
|
||||
rgba: (1,.2,.2,.2)
|
||||
orientation: 'vertical'
|
||||
|
||||
Label:
|
||||
id: Court_name
|
||||
text: root.Court_name
|
||||
font_size: 30
|
||||
size_hint:(1,.2)
|
||||
bold: True
|
||||
|
||||
canvas.before:
|
||||
Color:
|
||||
rgba: root.rgba
|
||||
Rectangle:
|
||||
size: self.size
|
||||
pos: self.pos
|
||||
|
||||
|
||||
|
||||
Label:
|
||||
id: kv_sec
|
||||
text: root.seconds_string
|
||||
font_size: 70
|
||||
size_hint:(1,.5)
|
||||
|
||||
canvas.before:
|
||||
Color:
|
||||
rgba: root.rgba
|
||||
Rectangle:
|
||||
size: self.size
|
||||
pos: self.pos
|
||||
|
||||
Label:
|
||||
id: average
|
||||
text: root.average
|
||||
font_size: 25
|
||||
size_hint:(1,.2)
|
||||
|
||||
canvas.before:
|
||||
Color:
|
||||
rgba: root.rgba
|
||||
Rectangle:
|
||||
size: self.size
|
||||
pos: self.pos
|
||||
Label:
|
||||
id: info
|
||||
text: root.info
|
||||
font_size: 30
|
||||
size_hint:(1,.2)
|
||||
bold: True
|
||||
|
||||
canvas.before:
|
||||
Color:
|
||||
rgba: root.rgba
|
||||
Rectangle:
|
||||
size: self.size
|
||||
pos: self.pos
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
""")
|
||||
Window.size = (300, 300)
|
||||
|
||||
list = [0] * 10
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class MySec(BoxLayout):
|
||||
seconds_string = StringProperty('')
|
||||
info = StringProperty('')
|
||||
average = StringProperty('')
|
||||
Court_name = StringProperty('')
|
||||
Config.set('kivy','window_icon','./beeps.ico')
|
||||
Config.set('graphics', 'always_on_top','1')
|
||||
#Config.set('graphics','position', 'custom' )
|
||||
Config.set('graphics','left',10)
|
||||
Config.set('graphics','top',50)
|
||||
Config.set('graphics','height',300)
|
||||
Config.set('graphics','width',300)
|
||||
Config.write()
|
||||
|
||||
|
||||
#rgba = StringProperty('')
|
||||
|
||||
|
||||
class MyApp(App):
|
||||
def build(self):
|
||||
self.title = 'Beeper V2.3'
|
||||
|
||||
|
||||
|
||||
|
||||
Clock.schedule_interval(lambda dt: self.update_time(), 0.5)
|
||||
|
||||
return MySec()
|
||||
|
||||
def update_time(self):
|
||||
if list[9] != 0:
|
||||
del list[9]
|
||||
else:
|
||||
self.root.Court_name = Court_name
|
||||
try:
|
||||
with open(filePath,'r') as f:
|
||||
lastLine = None
|
||||
lines = f.readlines()
|
||||
if lines[-1] != lastLine:
|
||||
lastLine = lines[-1]
|
||||
BC = lastLine.find("Bounce Count")
|
||||
BC = lastLine[BC+14:BC+15]
|
||||
BC = int(BC)
|
||||
|
||||
if BC == 0:
|
||||
|
||||
|
||||
CN = lastLine.find("Crosses Net")
|
||||
CN = lastLine[CN+13:CN+17]
|
||||
|
||||
if CN == 'true':
|
||||
|
||||
diff = lastLine.find("Time Diff")
|
||||
diff = lastLine[diff+11:diff+19]
|
||||
diff = float(diff)
|
||||
diff = round((diff * 1000),1)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if diff <= Thresh1:
|
||||
diff1 = (str(diff)+'ms')
|
||||
self.root.seconds_string = diff1
|
||||
self.root.info = Thresh1str
|
||||
|
||||
|
||||
|
||||
if list[0] != diff:
|
||||
list.insert(0,diff)
|
||||
avg = str(round((sum(list)/10),1))
|
||||
self.root.average = ('10 beep average:' + avg)
|
||||
self.root.rgba = [218/255,165/255,32/255,1]
|
||||
|
||||
|
||||
|
||||
else:
|
||||
pass
|
||||
|
||||
|
||||
elif ((diff > Thresh1) and (diff <= Thresh2)):
|
||||
diff1 = (str(diff)+'ms')
|
||||
self.root.seconds_string = diff1
|
||||
self.root.info = Thresh2str
|
||||
|
||||
if list[0] != diff:
|
||||
list.insert(0,diff)
|
||||
avg = str(round((sum(list)/10),1))
|
||||
|
||||
self.root.average = ('10 beep average:' + avg)
|
||||
self.root.rgba = [19/255,229/255,19/255,1]
|
||||
else:
|
||||
pass
|
||||
|
||||
|
||||
|
||||
|
||||
elif ((diff > Thresh2) and (diff <= Thresh3)):
|
||||
diff1 = (str(diff)+'ms')
|
||||
self.root.seconds_string = diff1
|
||||
self.root.info = Thresh3str
|
||||
|
||||
if list[0] != diff:
|
||||
list.insert(0,diff)
|
||||
avg = str(round((sum(list)/10),1))
|
||||
self.root.average = ('10 beep average:' + avg)
|
||||
self.root.rgba = [235/255,116/255,19/255,1]
|
||||
else:
|
||||
pass
|
||||
|
||||
|
||||
|
||||
elif ((diff > Thresh3) and (diff <= Thresh4)):
|
||||
diff1 = (str(diff)+'ms')
|
||||
self.root.seconds_string = diff1
|
||||
self.root.info = Thresh4str
|
||||
|
||||
if list[0] != diff:
|
||||
list.insert(0,diff)
|
||||
avg = str(round((sum(list)/10),1))
|
||||
self.root.average = ('10 beep average:' + avg)
|
||||
self.root.rgba = [219/255,0/255,0/255,1]
|
||||
else:
|
||||
pass
|
||||
|
||||
|
||||
|
||||
|
||||
elif diff > Thresh5:
|
||||
diff1 = (str(diff)+'ms')
|
||||
self.root.seconds_string = diff1
|
||||
self.root.info = Thresh5str
|
||||
|
||||
if list[0] != diff:
|
||||
list.insert(0,diff)
|
||||
avg = str(round((sum(list)/10),1))
|
||||
self.root.average = ('10 beep average:' + avg)
|
||||
self.root.rgba = [90/255,4/255,4/255,1]
|
||||
else:
|
||||
pass
|
||||
|
||||
|
||||
|
||||
else:
|
||||
|
||||
pass
|
||||
|
||||
else:
|
||||
pass
|
||||
except:
|
||||
print(chr(27) + "[2J")
|
||||
print("#################################################################################")
|
||||
print(filePath + "Is not reachable, please check its accessible through file explorer")
|
||||
input()
|
||||
exit()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
MyApp().run()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user