├── .github ├── images │ ├── adventure.png │ ├── greetings.png │ └── quiz.png └── workflows │ ├── publish-pypi-on-release.yml │ └── publish-testpypi-on-commit.yml ├── .gitignore ├── License.md ├── README.md ├── pyproject.toml ├── requirements.txt ├── setup.py ├── src └── pythonautogui │ ├── __init__.py │ ├── internals.py │ └── overrides.py └── tests ├── adventure.py ├── greetings.py ├── quiz.py └── themes ├── LICENSE ├── azure.tcl └── theme ├── dark.tcl ├── dark ├── box-accent.png ├── box-basic.png ├── box-hover.png ├── box-invalid.png ├── button-hover.png ├── card.png ├── check-accent.png ├── check-basic.png ├── check-hover.png ├── check-tri-accent.png ├── check-tri-basic.png ├── check-tri-hover.png ├── circle-accent.png ├── circle-basic.png ├── circle-hover.png ├── combo-button-basic.png ├── combo-button-focus.png ├── combo-button-hover.png ├── down-accent.png ├── down.png ├── empty.png ├── hor-accent.png ├── hor-basic.png ├── hor-hover.png ├── notebook.png ├── off-basic.png ├── on-accent.png ├── on-basic.png ├── outline-basic.png ├── outline-hover.png ├── radio-accent.png ├── radio-basic.png ├── radio-hover.png ├── radio-tri-accent.png ├── radio-tri-basic.png ├── radio-tri-hover.png ├── rect-accent-hover.png ├── rect-accent.png ├── rect-basic.png ├── rect-hover.png ├── right.png ├── scale-hor.png ├── scale-vert.png ├── separator.png ├── size.png ├── tab-basic.png ├── tab-disabled.png ├── tab-hover.png ├── tick-hor-accent.png ├── tick-hor-basic.png ├── tick-hor-hover.png ├── tick-vert-accent.png ├── tick-vert-basic.png ├── tick-vert-hover.png ├── tree-basic.png ├── tree-pressed.png ├── up-accent.png ├── up.png ├── vert-accent.png ├── vert-basic.png └── vert-hover.png ├── light.tcl └── light ├── box-accent.png ├── box-basic.png ├── box-hover.png ├── box-invalid.png ├── button-hover.png ├── card.png ├── check-accent.png ├── check-basic.png ├── check-hover.png ├── check-tri-accent.png ├── check-tri-basic.png ├── check-tri-hover.png ├── circle-accent.png ├── circle-basic.png ├── circle-hover.png ├── combo-button-basic.png ├── combo-button-focus.png ├── combo-button-hover.png ├── down-accent.png ├── down.png ├── empty.png ├── hor-accent.png ├── hor-basic.png ├── hor-hover.png ├── notebook.png ├── off-basic.png ├── off-hover.png ├── on-accent.png ├── on-basic.png ├── on-hover.png ├── outline-basic.png ├── outline-hover.png ├── radio-accent.png ├── radio-basic.png ├── radio-hover.png ├── radio-tri-accent.png ├── radio-tri-basic.png ├── radio-tri-hover.png ├── rect-accent-hover.png ├── rect-accent.png ├── rect-basic.png ├── rect-hover.png ├── right.png ├── scale-hor.png ├── scale-vert.png ├── separator.png ├── size.png ├── tab-basic.png ├── tab-disabled.png ├── tab-hover.png ├── tick-hor-accent.png ├── tick-hor-basic.png ├── tick-hor-hover.png ├── tick-vert-accent.png ├── tick-vert-basic.png ├── tick-vert-hover.png ├── tree-basic.png ├── tree-pressed.png ├── up-accent.png ├── up.png ├── vert-accent.png ├── vert-basic.png └── vert-hover.png /.github/images/adventure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/.github/images/adventure.png -------------------------------------------------------------------------------- /.github/images/greetings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/.github/images/greetings.png -------------------------------------------------------------------------------- /.github/images/quiz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/.github/images/quiz.png -------------------------------------------------------------------------------- /.github/workflows/publish-pypi-on-release.yml: -------------------------------------------------------------------------------- 1 | name: Publish Python 🐍 distributions 📦 to PyPI on new release 2 | 3 | on: release 4 | 5 | jobs: 6 | build-n-publish: 7 | name: Build and publish Python 🐍 distributions 📦 to PyPI 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - uses: actions/checkout@master 12 | - name: Set up Python 3.10 13 | uses: actions/setup-python@v3 14 | with: 15 | python-version: "3.10" 16 | 17 | - name: Install pypa/build 18 | run: >- 19 | python -m 20 | pip install 21 | build 22 | --user 23 | - name: Build a binary wheel and a source tarball 24 | run: >- 25 | python -m 26 | build 27 | --sdist 28 | --wheel 29 | --outdir dist/ 30 | . 31 | 32 | - name: Publish distribution 📦 to PyPI 33 | uses: pypa/gh-action-pypi-publish@master 34 | with: 35 | user: __token__ 36 | password: ${{ secrets.PYPI_API_TOKEN }} 37 | -------------------------------------------------------------------------------- /.github/workflows/publish-testpypi-on-commit.yml: -------------------------------------------------------------------------------- 1 | name: Publish Python 🐍 distributions 📦 to TestPyPI on commits 2 | 3 | on: push 4 | 5 | jobs: 6 | build-n-publish: 7 | name: Build and publish Python 🐍 distributions 📦 to TestPyPI 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - uses: actions/checkout@master 12 | - name: Set up Python 3.10 13 | uses: actions/setup-python@v3 14 | with: 15 | python-version: "3.10" 16 | 17 | - name: Install pypa/build 18 | run: >- 19 | python -m 20 | pip install 21 | build 22 | --user 23 | - name: Build a binary wheel and a source tarball 24 | run: >- 25 | python -m 26 | build 27 | --sdist 28 | --wheel 29 | --outdir dist/ 30 | . 31 | 32 | - name: Publish distribution 📦 to Test PyPI 33 | uses: pypa/gh-action-pypi-publish@master 34 | with: 35 | password: ${{ secrets.TEST_PYPI_API_TOKEN }} 36 | repository_url: https://test.pypi.org/legacy/ -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # general things to ignore 2 | build/ 3 | dist/ 4 | *.egg-info/ 5 | *.egg 6 | *.py[cod] 7 | __pycache__/ 8 | *.so 9 | *~ 10 | -------------------------------------------------------------------------------- /License.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Zachary Smith 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Python Auto GUI 2 | _Generate a Tkinter GUI from any Python program_ 3 | 4 | - Creates a Tkinter GUI to replace any command line interface 5 | - Interprets your existing code, removing the need for programming a GUI by hand. 6 | - Dynamically generates tidy applications, with quality of life features such as exporting data to CSV or PDF. 7 | 8 | | | | | 9 | |---|---|---| 10 | | ![adventure](https://github.com/Cutwell/python-auto-gui/blob/6071edf6515bb744957a6ed5b13f2c43597783d1/.github/images/adventure.png) | ![quiz](https://github.com/Cutwell/python-auto-gui/blob/6071edf6515bb744957a6ed5b13f2c43597783d1/.github/images/quiz.png) | ![greetings](https://github.com/Cutwell/python-auto-gui/blob/6071edf6515bb744957a6ed5b13f2c43597783d1/.github/images/greetings.png) | 11 | | A choose-your-own adventure | A simple maths quiz | A hello world example | 12 | 13 | ## Quick-start 14 | ```python 15 | from autogui import print, input, run # import overrides, and run function 16 | run() # start GUI 17 | ``` 18 | 19 | ### 10 second example 20 | ```python 21 | from autogui import print, input, run # import overrides, and run function 22 | run() # start GUI 23 | 24 | myAnswer = input("What is your name?") # renders a textbox and waits for user input 25 | 26 | input("Click me to continue") # renders a button and waits for user input 27 | 28 | print("Hello, "+myAnswer) # renders text 29 | ``` 30 | 31 | | Function | Feature | 32 | | :---: | :---: | 33 | | `input()` | Creates a button and waits for the user to press it | 34 | | `var = input()` | Creates a text box and waits for the user to enter an input | 35 | | `print()` | Creates a label with the passed text | 36 | 37 | ### Footer + export options 38 | ```python 39 | from autogui import input, run, footer # import overrides, and run + footer functions 40 | run() # start GUI 41 | 42 | myAnswer = input("What is your name?") # renders a textbox and waits for user input 43 | 44 | footer() # renders a footer with export options 45 | ``` 46 | 47 | - The footer function is an optional function that can be called at the end of your program to render a footer with export options. 48 | - These export options are: 49 | 50 | | Export | Function | 51 | | :---: | :---: | 52 | | `CSV` | Export Q/A's as a CSV file. | 53 | | `PDF` | Export as a PDF document (currently TODO). | 54 | | `JPG` | Export as a JPG image (currently TODO). | 55 | 56 | - PDF and JPG export are not yet implemented, as usual methods of exporting the tkinter canvas using postscript don't support export of widgets. 57 | 58 | ## Explaining the code 59 | In order to work as a drop-in solution for existing code, we override existing functions in the Python language. 60 | 61 | *Print*: The print function is overridden to create a label with the passed text. 62 | 63 | *Input*: The input function analyzes the function call to determine if the user is requesting a text box or a button. If the function saves the returned value to a variable, it will create a text box. If the function output is not saved to a variable, it will create a button. 64 | 65 | *Thread communication*: The Tkinter GUI runs in a seperate thread to the main application, in order to prevent UI blocking. Communication between the main application and the GUI is done using queues. Print and Input functions place messages in the queue, and the GUI reads them and renders the appropriate UI. The GUI can also place messages on a seperate queue, for instance to return user input from text boxes or buttons to the main application. 66 | 67 | ## Themeing 68 | Tkinter supports themes to improve the default look and feel of the GUI. 69 | [rdbende/Azure-ttk-theme](https://github.com/rdbende/Azure-ttk-theme) is the theme used in screenshots for this package (with "light" (default) and "dark" themes). 70 | If no theme folder is found in `themes/azure.tcl` relative to the main `.py` file, the default tkinter theme is used. 71 | 72 | *Setting a new theme* 73 | ```python 74 | from autogui import print, input, run # import overrides, and run function 75 | run(theme_name="light", theme_source="folder/new_theme.tcl") # start GUI 76 | ``` 77 | 78 | ## License 79 | [MIT](https://opensource.org/licenses/MIT) -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["hatchling"] 3 | build-backend = "hatchling.build" 4 | 5 | [project] 6 | name = "pythonautogui" 7 | version = "0.0.2" 8 | authors = [ 9 | { name="Zachary Smith", email="zachsmith.dev@gmail.com" }, 10 | ] 11 | description = "Generate a Tkinter GUI from any Python program" 12 | readme = "README.md" 13 | requires-python = ">=3.10" 14 | classifiers = [ 15 | "Programming Language :: Python :: 3", 16 | "License :: OSI Approved :: MIT License", 17 | "Operating System :: OS Independent", 18 | ] 19 | 20 | [project.urls] 21 | "Homepage" = "https://github.com/Cutwell/python-auto-gui" 22 | "Bug Tracker" = "https://github.com/Cutwell/python-auto-gui/issues" 23 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/requirements.txt -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | import setuptools 2 | 3 | with open('README.md', 'r', encoding='utf-8') as fh: 4 | long_description = fh.read() 5 | 6 | setuptools.setup( 7 | name='pythonautogui', 8 | author='Zachary Smith', 9 | author_email='zachsmith.dev@gmail.com', 10 | description='Generate a Tkinter GUI from any Python program', 11 | keywords='tkinter, gui, gui-automation, gui-automation-python', 12 | long_description=long_description, 13 | long_description_content_type='text/markdown', 14 | url='https://github.com/Cutwell/python-auto-gui', 15 | project_urls={ 16 | 'Documentation': 'https://github.com/Cutwell/python-auto-gui', 17 | 'Bug Reports': 18 | 'https://github.com/Cutwell/python-auto-gui/issues', 19 | 'Source Code': 'https://github.com/Cutwell/python-auto-gui', 20 | # 'Funding': '', 21 | # 'Say Thanks!': '', 22 | }, 23 | package_dir={'': 'src'}, 24 | packages=setuptools.find_packages(where='src'), 25 | classifiers=[ 26 | # see https://pypi.org/classifiers/ 27 | 'Development Status :: 4 - Beta', 28 | 29 | 'Intended Audience :: Developers', 30 | 'Topic :: Software Development :: Code Generators', 31 | 32 | 'Programming Language :: Python :: 3.10', 33 | 'Programming Language :: Python :: 3 :: Only', 34 | 'License :: OSI Approved :: MIT License', 35 | 'Operating System :: OS Independent', 36 | ], 37 | python_requires='>=3.10', 38 | install_requires=['Pillow'], 39 | extras_require={ 40 | #'dev': ['check-manifest'], 41 | # 'test': ['coverage'], 42 | }, 43 | # entry_points={ 44 | # 'console_scripts': [ # This can provide executable scripts 45 | # 'run=examplepy:main', 46 | # You can execute `run` in bash to run `main()` in src/examplepy/__init__.py 47 | # ], 48 | # }, 49 | ) -------------------------------------------------------------------------------- /src/pythonautogui/__init__.py: -------------------------------------------------------------------------------- 1 | from pythonautogui.overrides import * 2 | from pythonautogui.internals import * -------------------------------------------------------------------------------- /src/pythonautogui/internals.py: -------------------------------------------------------------------------------- 1 | """ 2 | Generate dynamic TKinter GUI from executing Python __script__. 3 | """ 4 | 5 | import tkinter.filedialog 6 | import tkinter as tk 7 | from tkinter import ttk 8 | import threading 9 | from inspect import currentframe 10 | import re 11 | from functools import partial 12 | from queue import Queue 13 | import logging 14 | import sys 15 | import os 16 | import csv 17 | import subprocess 18 | from PIL import Image 19 | import io 20 | 21 | 22 | def get_file_script(): 23 | """ 24 | Get the __script__ from the file. 25 | """ 26 | # get __script__ text 27 | script = [] 28 | for line in open(sys.argv[0], 'r'): 29 | script.append(line.strip().split()) 30 | 31 | return script 32 | 33 | 34 | __threadsafe_queue_tk__ = Queue() 35 | __threadsafe_queue_io__ = Queue() 36 | __script__ = get_file_script() 37 | __input_log__ = [] 38 | __autogui__ = None 39 | 40 | 41 | def threadsafe_print(text, end, frame): 42 | """ 43 | Print text in the tkinter gui. 44 | """ 45 | if text == "" or text == "\n": 46 | # label as spacer 47 | widget = tk.Label(frame, text="-----------", padx=2, pady=2) 48 | else: 49 | # label as text 50 | widget = tk.Label(frame, text=text, padx=2, pady=2) 51 | 52 | widget.pack(padx=5, pady=5) 53 | 54 | 55 | def threadsafe_input(text, match, frame): 56 | """ 57 | Get text input from tkinter gui if this function assigns output to a variable, else display a button with the text. 58 | """ 59 | 60 | def disable(widget): 61 | # disable widget 62 | widget.configure(state="disabled") 63 | widget.unbind("") 64 | 65 | def callback_button(button_widget): 66 | disable(button_widget) 67 | 68 | __threadsafe_queue_io__.put(True) # put positive Boolean on io queue 69 | 70 | def callback_textinput(text_widget, button_widget, prompt=""): 71 | disable(text_widget) 72 | disable(button_widget) 73 | 74 | text = text_widget.get() # get text from Entry widget 75 | 76 | __threadsafe_queue_io__.put(text) # put user input on io queue 77 | __input_log__.append([prompt, text]) # add user input to log 78 | 79 | if match == True: 80 | # row for input and button 81 | row = tk.Frame(frame) 82 | row.pack(padx=5, pady=5) 83 | 84 | # input box 85 | text_widget = tk.Entry(row) 86 | text_widget.insert(0, text) 87 | text_widget.configure(width=len(text)+4) 88 | text_widget.grid(row=0, column=0, padx=5, pady=5) 89 | 90 | # button 91 | button_widget = tk.Button(row, text="Enter", padx=5, pady=5) 92 | 93 | # set button command 94 | button_widget.configure(command=partial( 95 | callback_textinput, text_widget, button_widget, prompt=text)) 96 | 97 | # set button callback on enter key 98 | button_widget.bind("", lambda event: partial( 99 | callback_textinput, text_widget, button_widget, prompt=text)) 100 | 101 | button_widget.grid(row=0, column=1, padx=5, pady=5) 102 | 103 | else: 104 | # button 105 | button_widget = tk.Button(frame, text=text, padx=5, pady=5) 106 | 107 | # set button command 108 | button_widget.configure(command=partial( 109 | callback_button, button_widget)) 110 | 111 | # set button callback on enter key 112 | button_widget.bind("", lambda event: partial( 113 | callback_button, button_widget)) 114 | button_widget.pack(padx=5, pady=5) 115 | 116 | 117 | def main(theme_name, theme_source): 118 | """ 119 | Create a rezizeable Tkinter Gui styled as a blank PDF 120 | """ 121 | 122 | # init window 123 | root = tk.Tk() 124 | root.title("Tkinter GUI") 125 | root.geometry("800x600") 126 | root.resizable(True, True) 127 | 128 | root.protocol("WM_DELETE_WINDOW", threadsafe_exit) # set exit callback 129 | 130 | # check "themes/azure.tcl" exists relative to current directory 131 | theme_source = os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])), theme_source) 132 | if os.path.isfile(theme_source): 133 | logging.info("Loading Azure theme") 134 | # set initial theme 135 | root.tk.call("source", theme_source) 136 | root.tk.call("set_theme", theme_name) 137 | else: 138 | logging.info(f"Azure theme not found in {theme_source}, using default theme") 139 | 140 | # add light/dark mode toggle 141 | # light_icon = icon_to_image("sun", fill="#fff", scale_to_width=32) 142 | #theme_button = tk.Button(root, image=light_icon) 143 | #theme_button.configure(command=partial(change_theme, root, theme_button)) 144 | #theme_button.pack(padx=5, pady=5) 145 | 146 | # make it scrollable 147 | scrollbar = tk.Scrollbar(root) 148 | scrollbar.pack(side=tk.RIGHT, fill=tk.Y) 149 | canvas = tk.Canvas(root, width=800, height=600, 150 | yscrollcommand=scrollbar.set) 151 | canvas.pack(side=tk.LEFT, fill=tk.BOTH) 152 | 153 | #set canvas background red 154 | scrollbar.config(command=canvas.yview) 155 | 156 | 157 | # add a centered frame to the canvas 158 | frame = tk.Frame(canvas) 159 | frame.pack(fill=tk.BOTH, expand=True) 160 | 161 | # offset the canvas to the center of the window 162 | logging.debug("Screen width: %s, Screen height: %s", root.winfo_width(), root.winfo_height()) 163 | x_offset = 400 164 | y_offset = 100 165 | 166 | canvas.create_window((x_offset, y_offset), window=frame, anchor=tk.CENTER) 167 | 168 | # return root to enter mainloop 169 | dynamic_mainloop(root, canvas, frame) 170 | 171 | 172 | def dynamic_mainloop(root, canvas, frame): 173 | """ 174 | Run mainloop, with handling of thread-safe queue calls for input and print functions. 175 | """ 176 | 177 | # run mainloop 178 | while True: 179 | # get next item from thread-safe queue if exists 180 | if __threadsafe_queue_tk__.qsize() > 0: 181 | item = __threadsafe_queue_tk__.get() 182 | 183 | # handle item 184 | if item[0] == "print": 185 | # pass text, end(line end char), frame 186 | threadsafe_print(item[1], item[2], frame) 187 | elif item[0] == "input": 188 | # pass text, match(button/textbox), frame 189 | threadsafe_input(item[1], item[2], frame) 190 | elif item[0] == "exit": 191 | # exit mainloop 192 | root.destroy() 193 | break 194 | elif item[0] == "footer": 195 | # render footer with options to export/quit 196 | threadsafe_footer(frame, canvas) 197 | elif item[0] == "clear": 198 | # clear frame children 199 | frame.destroy() 200 | 201 | # add a new frame to the canvas 202 | frame = tk.Frame(canvas) 203 | frame.pack(fill=tk.BOTH, expand=True) 204 | 205 | # offset the canvas to the center of the window 206 | x_offset = 400 207 | y_offset = 100 208 | 209 | canvas.create_window((x_offset, y_offset), window=frame, anchor=tk.CENTER) 210 | 211 | # update gui 212 | root.update() 213 | canvas.configure(scrollregion=canvas.bbox("all")) 214 | 215 | 216 | def run(theme_name="light", theme_source="themes/azure.tcl"): 217 | """ 218 | Run the tkinter gui in a thread. 219 | """ 220 | def tkinter_thread(theme_name, theme_source): 221 | main(theme_name, theme_source) 222 | 223 | __autogui__ = threading.Thread(target=tkinter_thread, args=(theme_name, theme_source,)) 224 | __autogui__.start() 225 | 226 | 227 | def threadsafe_footer(frame, canvas): 228 | """ 229 | Render page footer, with options to export to CSV, PDF or quit applicaiton. 230 | """ 231 | 232 | # function to push quit command to thread-safe queue 233 | def quit(): 234 | __threadsafe_queue_tk__.put(("exit",)) 235 | 236 | # function to save __input_log__ to csv 237 | def save_csv(): 238 | # get file name 239 | file_name = tkinter.filedialog.asksaveasfilename( 240 | defaultextension=".csv", filetypes=[("CSV", "*.csv")]) 241 | 242 | # write list items to csv 243 | with open(file_name, "w") as f: 244 | writer = csv.writer(f) 245 | writer.writerows(__input_log__) 246 | 247 | # function to save canvas to pdf 248 | def save_pdf(): 249 | # get file name 250 | file_name = tkinter.filedialog.asksaveasfilename( 251 | defaultextension=".pdf", filetypes=[("PDF", "*.pdf")]) 252 | 253 | temp_file_name = file_name + ".ps" 254 | 255 | # save canvas to pdf 256 | canvas.update() 257 | canvas.postscript(file=temp_file_name, colormode='color') 258 | process = subprocess.Popen(["ps2pdf", temp_file_name, file_name], shell=True) 259 | process.wait() 260 | os.remove(temp_file_name) 261 | 262 | 263 | def screenshot(): 264 | # get file name 265 | file_name = tkinter.filedialog.asksaveasfilename( 266 | defaultextension=".jpg", filetypes=[("JPEG", "*.jpg")]) 267 | 268 | # save canvas to pdf 269 | canvas.update() 270 | ps = canvas.postscript(colormode='color') 271 | img = Image.open(io.BytesIO(ps.encode('utf-8'))) 272 | img.save(file_name, 'jpeg') 273 | 274 | # create row for footer 275 | row = tk.Frame(frame) 276 | row.pack(padx=5, pady=5) 277 | 278 | # export to csv button 279 | export_csv_button = tk.Button(row, text="Export to CSV", padx=5, pady=5) 280 | export_csv_button.configure(command=save_csv) 281 | export_csv_button.grid(row=0, column=0, padx=5, pady=5) 282 | 283 | # export to pdf button 284 | export_pdf_button = tk.Button(row, text="Export to PDF", padx=5, pady=5) 285 | export_pdf_button.configure(command=save_pdf) 286 | export_pdf_button.grid(row=0, column=1, padx=5, pady=5) 287 | 288 | # screen shot button 289 | screen_shot_button = tk.Button(row, text="Screen Shot", padx=5, pady=5) 290 | screen_shot_button.configure(command=screenshot) 291 | screen_shot_button.grid(row=0, column=2, padx=5, pady=5) 292 | 293 | # disable pdf and screenshot buttons 294 | export_pdf_button.configure(state="disabled") 295 | screen_shot_button.configure(state="disabled") 296 | 297 | # quit button 298 | quit_button = tk.Button(row, text="Quit", padx=5, pady=5) 299 | quit_button.configure(command=quit) 300 | quit_button.grid(row=0, column=3, padx=5, pady=5) 301 | 302 | 303 | def threadsafe_exit(): 304 | """ 305 | Exit the application. 306 | """ 307 | __threadsafe_queue_tk__.put(("exit",)) -------------------------------------------------------------------------------- /src/pythonautogui/overrides.py: -------------------------------------------------------------------------------- 1 | """ 2 | Override IO functions to display in Tkinter GUI. 3 | """ 4 | 5 | import logging 6 | from inspect import currentframe 7 | import re 8 | from pythonautogui.internals import __script__, __threadsafe_queue_io__, __threadsafe_queue_tk__, run 9 | 10 | 11 | def print(text="", end="\n"): 12 | """ 13 | Override the print function to display in the tkinter gui. 14 | Add print call to threadsafe queue. 15 | """ 16 | logging.debug(f"print: {text}") 17 | 18 | # add print call to thread-safe queue 19 | __threadsafe_queue_tk__.put(("print", text, end)) 20 | 21 | 22 | def input(text=""): 23 | """ 24 | Override the input function to get input from the tkinter gui. 25 | Add input call to threadsafe queue. 26 | """ 27 | logging.debug(f"input prompt: {text}") 28 | 29 | # traceback to get the line number of the input function 30 | cf = currentframe() 31 | lineno = cf.f_back.f_lineno 32 | 33 | # locate __script__ line 34 | line = __script__[lineno-1] 35 | 36 | # check if the line is a variable assignment 37 | match = False 38 | for index in range(len(line)): 39 | 40 | if re.search(r'(input)', line[index]) != None: 41 | 42 | if line[index-1] == []: 43 | sub = 2 44 | else: 45 | sub = 1 46 | 47 | # check if the line is a variable assignment 48 | if re.search(r'(=)', line[index-sub]) != None or re.search(r'=', line[index]) != None: 49 | match = True 50 | break 51 | 52 | # add input call to thread-safe queue 53 | __threadsafe_queue_tk__.put(("input", text, match)) 54 | 55 | def input_blocker(): 56 | # await input from thread-safe queue 57 | while __threadsafe_queue_io__.qsize() == 0: 58 | pass 59 | 60 | # get input from thread-safe queue 61 | item = __threadsafe_queue_io__.get() 62 | 63 | return item 64 | 65 | output = input_blocker() 66 | 67 | return output 68 | 69 | def exit(): 70 | """ 71 | Override the exit function to exit the tkinter gui. 72 | Add exit call to threadsafe queue. 73 | """ 74 | logging.debug("exit") 75 | 76 | # add exit call to thread-safe queue 77 | __threadsafe_queue_tk__.put(("exit",)) 78 | 79 | def footer(): 80 | """ 81 | Push footer request to threadsafe queue. 82 | """ 83 | logging.debug("footer") 84 | 85 | # add footer call to thread-safe queue 86 | __threadsafe_queue_tk__.put(("footer",)) 87 | 88 | 89 | def clear(): 90 | """ 91 | Override the clear function to clear the tkinter gui. 92 | Add clear call to threadsafe queue. 93 | """ 94 | logging.debug("clear") 95 | 96 | # add clear call to thread-safe queue 97 | __threadsafe_queue_tk__.put(("clear",)) -------------------------------------------------------------------------------- /tests/adventure.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import random 3 | from pythonautogui import print, input, run, clear 4 | run() 5 | 6 | if __name__ == "__main__": 7 | logging.basicConfig(format='%(asctime)s - %(message)s', 8 | level=logging.DEBUG) 9 | 10 | characters = ["an adventurer", "a wizard", "a princess", "a tax collector"] 11 | 12 | # random character 13 | pov = characters[random.randint(0, len(characters) - 1)] 14 | 15 | while 1: 16 | 17 | print(f"You are {pov}. You are in a dark room. There is a door to your right and left.") 18 | print("Enter left / right to choose.") 19 | 20 | while 1: 21 | choice = input("Which door do you take?") 22 | 23 | if choice == "left" or choice == "right": 24 | break 25 | else: 26 | print("Please enter left or right.") 27 | continue 28 | 29 | if choice == "left": 30 | print("You have chosen left.") 31 | 32 | print("The door leads to stairs. You can go up or down.") 33 | 34 | print("Enter up / down to choose.") 35 | 36 | while 1: 37 | choice = input("Which stairs do you take?") 38 | 39 | if choice == "up" or choice == "down": 40 | break 41 | else: 42 | print("Please enter up or down.") 43 | continue 44 | 45 | if choice == "up": 46 | print("You have chosen up.") 47 | 48 | print("You are in a room with a table. There is a chair by the table. There is a book on the chair.") 49 | 50 | pov = characters[random.randint(0, len(characters) - 1)] 51 | print(f"The book is a story about {pov}..") 52 | 53 | input("Press here to read the book.") 54 | 55 | clear() 56 | 57 | elif choice == "down": 58 | print("You have chosen down.") 59 | 60 | print("You are in a room with a table. There is a chair by the table. There is a book on the chair.") 61 | 62 | pov = characters[random.randint(0, len(characters) - 1)] 63 | print(f"The book is a story about {pov}..") 64 | 65 | input("Press here to read the book.") 66 | 67 | clear() 68 | 69 | elif choice == "right": 70 | print("You have chosen right.") 71 | 72 | print("The door leads to a room with a bed. There is a book on the bed.") 73 | 74 | pov = characters[random.randint(0, len(characters) - 1)] 75 | print(f"The book is a story about {pov}..") 76 | 77 | input("Press here to read the book.") 78 | 79 | clear() 80 | -------------------------------------------------------------------------------- /tests/greetings.py: -------------------------------------------------------------------------------- 1 | import logging 2 | from pythonautogui import print, input, run, footer 3 | run() 4 | 5 | if __name__ == "__main__": 6 | logging.basicConfig(format='%(asctime)s - %(message)s', 7 | level=logging.DEBUG) 8 | 9 | var = input("What is your name?") 10 | 11 | print(f"Hi {var}") 12 | 13 | footer() 14 | -------------------------------------------------------------------------------- /tests/quiz.py: -------------------------------------------------------------------------------- 1 | import logging 2 | from pythonautogui import print, input, run, footer 3 | run() 4 | 5 | if __name__ == "__main__": 6 | logging.basicConfig(format='%(asctime)s - %(message)s', 7 | level=logging.DEBUG) 8 | 9 | print("This is a simple maths quiz.") 10 | 11 | input("Press here to start.") 12 | 13 | questions = ["What is 1 + 1?", "What is 2 + 2?", "What is 3 + 3?"] 14 | answers = ["2", "4", "6"] 15 | score = 0 16 | 17 | for question in questions: 18 | print(question) 19 | answer = input("Answer: ") 20 | if answer == answers[questions.index(question)]: 21 | print("Correct!") 22 | score += 1 23 | else: 24 | print("Incorrect!") 25 | 26 | print() 27 | 28 | print(f"You scored {score} out of {len(questions)}.") 29 | 30 | footer() 31 | -------------------------------------------------------------------------------- /tests/themes/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 rdbende 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /tests/themes/azure.tcl: -------------------------------------------------------------------------------- 1 | # Copyright © 2021 rdbende 2 | 3 | source [file join [file dirname [info script]] theme light.tcl] 4 | source [file join [file dirname [info script]] theme dark.tcl] 5 | 6 | option add *tearOff 0 7 | 8 | proc set_theme {mode} { 9 | if {$mode == "dark"} { 10 | ttk::style theme use "azure-dark" 11 | 12 | array set colors { 13 | -fg "#ffffff" 14 | -bg "#333333" 15 | -disabledfg "#ffffff" 16 | -disabledbg "#737373" 17 | -selectfg "#ffffff" 18 | -selectbg "#007fff" 19 | } 20 | 21 | ttk::style configure . \ 22 | -background $colors(-bg) \ 23 | -foreground $colors(-fg) \ 24 | -troughcolor $colors(-bg) \ 25 | -focuscolor $colors(-selectbg) \ 26 | -selectbackground $colors(-selectbg) \ 27 | -selectforeground $colors(-selectfg) \ 28 | -insertcolor $colors(-fg) \ 29 | -insertwidth 1 \ 30 | -fieldbackground $colors(-selectbg) \ 31 | -font {"Segoe Ui" 10} \ 32 | -borderwidth 1 \ 33 | -relief flat 34 | 35 | tk_setPalette background [ttk::style lookup . -background] \ 36 | foreground [ttk::style lookup . -foreground] \ 37 | highlightColor [ttk::style lookup . -focuscolor] \ 38 | selectBackground [ttk::style lookup . -selectbackground] \ 39 | selectForeground [ttk::style lookup . -selectforeground] \ 40 | activeBackground [ttk::style lookup . -selectbackground] \ 41 | activeForeground [ttk::style lookup . -selectforeground] 42 | 43 | ttk::style map . -foreground [list disabled $colors(-disabledfg)] 44 | 45 | option add *font [ttk::style lookup . -font] 46 | option add *Menu.selectcolor $colors(-fg) 47 | 48 | } elseif {$mode == "light"} { 49 | ttk::style theme use "azure-light" 50 | 51 | array set colors { 52 | -fg "#000000" 53 | -bg "#ffffff" 54 | -disabledfg "#737373" 55 | -disabledbg "#ffffff" 56 | -selectfg "#ffffff" 57 | -selectbg "#007fff" 58 | } 59 | 60 | ttk::style configure . \ 61 | -background $colors(-bg) \ 62 | -foreground $colors(-fg) \ 63 | -troughcolor $colors(-bg) \ 64 | -focuscolor $colors(-selectbg) \ 65 | -selectbackground $colors(-selectbg) \ 66 | -selectforeground $colors(-selectfg) \ 67 | -insertcolor $colors(-fg) \ 68 | -insertwidth 1 \ 69 | -fieldbackground $colors(-selectbg) \ 70 | -font {"Segoe Ui" 10} \ 71 | -borderwidth 1 \ 72 | -relief flat 73 | 74 | tk_setPalette background [ttk::style lookup . -background] \ 75 | foreground [ttk::style lookup . -foreground] \ 76 | highlightColor [ttk::style lookup . -focuscolor] \ 77 | selectBackground [ttk::style lookup . -selectbackground] \ 78 | selectForeground [ttk::style lookup . -selectforeground] \ 79 | activeBackground [ttk::style lookup . -selectbackground] \ 80 | activeForeground [ttk::style lookup . -selectforeground] 81 | 82 | ttk::style map . -foreground [list disabled $colors(-disabledfg)] 83 | 84 | option add *font [ttk::style lookup . -font] 85 | option add *Menu.selectcolor $colors(-fg) 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /tests/themes/theme/dark.tcl: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021 rdbende 2 | 3 | # The Azure theme is a beautiful modern ttk theme inspired by Microsoft's fluent design. 4 | 5 | package require Tk 8.6 6 | 7 | namespace eval ttk::theme::azure-dark { 8 | variable version 2.0 9 | package provide ttk::theme::azure-dark $version 10 | 11 | ttk::style theme create azure-dark -parent clam -settings { 12 | proc load_images {imgdir} { 13 | variable I 14 | foreach file [glob -directory $imgdir *.png] { 15 | set img [file tail [file rootname $file]] 16 | set I($img) [image create photo -file $file -format png] 17 | } 18 | } 19 | 20 | load_images [file join [file dirname [info script]] dark] 21 | 22 | array set colors { 23 | -fg "#ffffff" 24 | -bg "#333333" 25 | -disabledfg "#ffffff" 26 | -disabledbg "#737373" 27 | -selectfg "#ffffff" 28 | -selectbg "#007fff" 29 | } 30 | 31 | ttk::style layout TButton { 32 | Button.button -children { 33 | Button.padding -children { 34 | Button.label -side left -expand true 35 | } 36 | } 37 | } 38 | 39 | ttk::style layout Toolbutton { 40 | Toolbutton.button -children { 41 | Toolbutton.padding -children { 42 | Toolbutton.label -side left -expand true 43 | } 44 | } 45 | } 46 | 47 | ttk::style layout TMenubutton { 48 | Menubutton.button -children { 49 | Menubutton.padding -children { 50 | Menubutton.indicator -side right 51 | Menubutton.label -side right -expand true 52 | } 53 | } 54 | } 55 | 56 | ttk::style layout TOptionMenu { 57 | OptionMenu.button -children { 58 | OptionMenu.padding -children { 59 | OptionMenu.indicator -side right 60 | OptionMenu.label -side right -expand true 61 | } 62 | } 63 | } 64 | 65 | ttk::style layout Accent.TButton { 66 | AccentButton.button -children { 67 | AccentButton.padding -children { 68 | AccentButton.label -side left -expand true 69 | } 70 | } 71 | } 72 | 73 | ttk::style layout TCheckbutton { 74 | Checkbutton.button -children { 75 | Checkbutton.padding -children { 76 | Checkbutton.indicator -side left 77 | Checkbutton.label -side right -expand true 78 | } 79 | } 80 | } 81 | 82 | ttk::style layout Switch.TCheckbutton { 83 | Switch.button -children { 84 | Switch.padding -children { 85 | Switch.indicator -side left 86 | Switch.label -side right -expand true 87 | } 88 | } 89 | } 90 | 91 | ttk::style layout Toggle.TButton { 92 | ToggleButton.button -children { 93 | ToggleButton.padding -children { 94 | ToggleButton.label -side left -expand true 95 | } 96 | } 97 | } 98 | 99 | ttk::style layout TRadiobutton { 100 | Radiobutton.button -children { 101 | Radiobutton.padding -children { 102 | Radiobutton.indicator -side left 103 | Radiobutton.label -side right -expand true 104 | } 105 | } 106 | } 107 | 108 | ttk::style layout Vertical.TScrollbar { 109 | Vertical.Scrollbar.trough -sticky ns -children { 110 | Vertical.Scrollbar.thumb -expand true 111 | } 112 | } 113 | 114 | ttk::style layout Horizontal.TScrollbar { 115 | Horizontal.Scrollbar.trough -sticky ew -children { 116 | Horizontal.Scrollbar.thumb -expand true 117 | } 118 | } 119 | 120 | ttk::style layout TCombobox { 121 | Combobox.field -sticky nswe -children { 122 | Combobox.padding -expand true -sticky nswe -children { 123 | Combobox.textarea -sticky nswe 124 | } 125 | } 126 | Combobox.button -side right -sticky ns -children { 127 | Combobox.arrow -sticky nsew 128 | } 129 | } 130 | 131 | ttk::style layout TSpinbox { 132 | Spinbox.field -sticky nsew -children { 133 | Spinbox.padding -expand true -sticky nswe -children { 134 | Spinbox.textarea -sticky nswe 135 | } 136 | 137 | } 138 | Spinbox.button -side right -sticky ns -children { 139 | null -side right -children { 140 | Spinbox.uparrow -side top 141 | Spinbox.downarrow -side bottom 142 | } 143 | } 144 | } 145 | 146 | ttk::style layout Horizontal.TSeparator { 147 | Horizontal.separator -sticky nswe 148 | } 149 | 150 | ttk::style layout Vertical.TSeparator { 151 | Vertical.separator -sticky nswe 152 | } 153 | 154 | ttk::style layout Horizontal.Tick.TScale { 155 | Horizontal.TickScale.trough -sticky ew -children { 156 | Horizontal.TickScale.slider -sticky w 157 | } 158 | } 159 | 160 | ttk::style layout Vertical.Tick.TScale { 161 | Vertical.TickScale.trough -sticky ns -children { 162 | Vertical.TickScale.slider -sticky n 163 | } 164 | } 165 | 166 | ttk::style layout Card.TFrame { 167 | Card.field { 168 | Card.padding -expand 1 169 | } 170 | } 171 | 172 | ttk::style layout TLabelframe { 173 | Labelframe.border { 174 | Labelframe.padding -expand 1 -children { 175 | Labelframe.label -side right 176 | } 177 | } 178 | } 179 | 180 | ttk::style layout TNotebook.Tab { 181 | Notebook.tab -children { 182 | Notebook.padding -side top -children { 183 | Notebook.label -side top -sticky {} 184 | } 185 | } 186 | } 187 | 188 | ttk::style layout Treeview.Item { 189 | Treeitem.padding -sticky nswe -children { 190 | Treeitem.indicator -side left -sticky {} 191 | Treeitem.image -side left -sticky {} 192 | Treeitem.text -side left -sticky {} 193 | } 194 | } 195 | 196 | 197 | # Elements 198 | 199 | # Button 200 | ttk::style configure TButton -padding {8 4 8 4} -width -10 -anchor center 201 | 202 | ttk::style element create Button.button image \ 203 | [list $I(rect-basic) \ 204 | {selected disabled} $I(rect-basic) \ 205 | disabled $I(rect-basic) \ 206 | pressed $I(rect-basic) \ 207 | selected $I(rect-basic) \ 208 | active $I(button-hover) \ 209 | ] -border 4 -sticky ewns 210 | 211 | # Toolbutton 212 | ttk::style configure Toolbutton -padding {8 4 8 4} -width -10 -anchor center 213 | 214 | ttk::style element create Toolbutton.button image \ 215 | [list $I(empty) \ 216 | {selected disabled} $I(empty) \ 217 | disabled $I(empty) \ 218 | pressed $I(rect-basic) \ 219 | selected $I(rect-basic) \ 220 | active $I(rect-basic) \ 221 | ] -border 4 -sticky ewns 222 | 223 | # Menubutton 224 | ttk::style configure TMenubutton -padding {8 4 4 4} 225 | 226 | ttk::style element create Menubutton.button \ 227 | image [list $I(rect-basic) \ 228 | disabled $I(rect-basic) \ 229 | pressed $I(rect-basic) \ 230 | active $I(button-hover) \ 231 | ] -border 4 -sticky ewns 232 | 233 | ttk::style element create Menubutton.indicator \ 234 | image [list $I(down) \ 235 | active $I(down) \ 236 | pressed $I(down) \ 237 | disabled $I(down) \ 238 | ] -width 15 -sticky e 239 | 240 | # OptionMenu 241 | ttk::style configure TOptionMenu -padding {8 4 4 4} 242 | 243 | ttk::style element create OptionMenu.button \ 244 | image [list $I(rect-basic) \ 245 | disabled $I(rect-basic) \ 246 | pressed $I(rect-basic) \ 247 | active $I(button-hover) \ 248 | ] -border 4 -sticky ewns 249 | 250 | ttk::style element create OptionMenu.indicator \ 251 | image [list $I(down) \ 252 | active $I(down) \ 253 | pressed $I(down) \ 254 | disabled $I(down) \ 255 | ] -width 15 -sticky e 256 | 257 | # AccentButton 258 | ttk::style configure Accent.TButton -padding {8 4 8 4} -width -10 -anchor center 259 | 260 | ttk::style element create AccentButton.button image \ 261 | [list $I(rect-accent) \ 262 | {selected disabled} $I(rect-accent-hover) \ 263 | disabled $I(rect-accent-hover) \ 264 | pressed $I(rect-accent) \ 265 | selected $I(rect-accent) \ 266 | active $I(rect-accent-hover) \ 267 | ] -border 4 -sticky ewns 268 | 269 | # Checkbutton 270 | ttk::style configure TCheckbutton -padding 4 271 | 272 | ttk::style element create Checkbutton.indicator image \ 273 | [list $I(box-basic) \ 274 | {alternate disabled} $I(check-tri-basic) \ 275 | {selected disabled} $I(check-basic) \ 276 | disabled $I(box-basic) \ 277 | {pressed alternate} $I(check-tri-hover) \ 278 | {active alternate} $I(check-tri-hover) \ 279 | alternate $I(check-tri-accent) \ 280 | {pressed selected} $I(check-hover) \ 281 | {active selected} $I(check-hover) \ 282 | selected $I(check-accent) \ 283 | {pressed !selected} $I(rect-hover) \ 284 | active $I(box-hover) \ 285 | ] -width 26 -sticky w 286 | 287 | # Switch 288 | ttk::style element create Switch.indicator image \ 289 | [list $I(off-basic) \ 290 | {selected disabled} $I(on-basic) \ 291 | disabled $I(off-basic) \ 292 | {pressed selected} $I(on-accent) \ 293 | {active selected} $I(on-accent) \ 294 | selected $I(on-accent) \ 295 | {pressed !selected} $I(off-basic) \ 296 | active $I(off-basic) \ 297 | ] -width 46 -sticky w 298 | 299 | # ToggleButton 300 | ttk::style configure Toggle.TButton -padding {8 4 8 4} -width -10 -anchor center 301 | 302 | ttk::style element create ToggleButton.button image \ 303 | [list $I(rect-basic) \ 304 | {selected disabled} $I(rect-accent-hover) \ 305 | disabled $I(rect-basic) \ 306 | {pressed selected} $I(rect-basic) \ 307 | {active selected} $I(rect-accent) \ 308 | selected $I(rect-accent) \ 309 | {pressed !selected} $I(rect-accent) \ 310 | active $I(rect-basic) \ 311 | ] -border 4 -sticky ewns 312 | 313 | # Radiobutton 314 | ttk::style configure TRadiobutton -padding 4 315 | 316 | ttk::style element create Radiobutton.indicator image \ 317 | [list $I(outline-basic) \ 318 | {alternate disabled} $I(radio-tri-basic) \ 319 | {selected disabled} $I(radio-basic) \ 320 | disabled $I(outline-basic) \ 321 | {pressed alternate} $I(radio-tri-hover) \ 322 | {active alternate} $I(radio-tri-hover) \ 323 | alternate $I(radio-tri-accent) \ 324 | {pressed selected} $I(radio-hover) \ 325 | {active selected} $I(radio-hover) \ 326 | selected $I(radio-accent) \ 327 | {pressed !selected} $I(circle-hover) \ 328 | active $I(outline-hover) \ 329 | ] -width 26 -sticky w 330 | 331 | # Scrollbar 332 | ttk::style element create Horizontal.Scrollbar.trough image $I(hor-basic) \ 333 | -sticky ew 334 | 335 | ttk::style element create Horizontal.Scrollbar.thumb \ 336 | image [list $I(hor-accent) \ 337 | disabled $I(hor-basic) \ 338 | pressed $I(hor-hover) \ 339 | active $I(hor-hover) \ 340 | ] -sticky ew 341 | 342 | ttk::style element create Vertical.Scrollbar.trough image $I(vert-basic) \ 343 | -sticky ns 344 | 345 | ttk::style element create Vertical.Scrollbar.thumb \ 346 | image [list $I(vert-accent) \ 347 | disabled $I(vert-basic) \ 348 | pressed $I(vert-hover) \ 349 | active $I(vert-hover) \ 350 | ] -sticky ns 351 | 352 | # Scale 353 | ttk::style element create Horizontal.Scale.trough image $I(scale-hor) \ 354 | -border 5 -padding 0 355 | 356 | ttk::style element create Horizontal.Scale.slider \ 357 | image [list $I(circle-accent) \ 358 | disabled $I(circle-basic) \ 359 | pressed $I(circle-hover) \ 360 | active $I(circle-hover) \ 361 | ] -sticky {} 362 | 363 | ttk::style element create Vertical.Scale.trough image $I(scale-vert) \ 364 | -border 5 -padding 0 365 | 366 | ttk::style element create Vertical.Scale.slider \ 367 | image [list $I(circle-accent) \ 368 | disabled $I(circle-basic) \ 369 | pressed $I(circle-hover) \ 370 | active $I(circle-hover) \ 371 | ] -sticky {} 372 | 373 | # Tickscale 374 | ttk::style element create Horizontal.TickScale.trough image $I(scale-hor) \ 375 | -border 5 -padding 0 376 | 377 | ttk::style element create Horizontal.TickScale.slider \ 378 | image [list $I(tick-hor-accent) \ 379 | disabled $I(tick-hor-basic) \ 380 | pressed $I(tick-hor-hover) \ 381 | active $I(tick-hor-hover) \ 382 | ] -sticky {} 383 | 384 | ttk::style element create Vertical.TickScale.trough image $I(scale-vert) \ 385 | -border 5 -padding 0 386 | 387 | ttk::style element create Vertical.TickScale.slider \ 388 | image [list $I(tick-vert-accent) \ 389 | disabled $I(tick-vert-basic) \ 390 | pressed $I(tick-vert-hover) \ 391 | active $I(tick-vert-hover) \ 392 | ] -sticky {} 393 | 394 | # Progressbar 395 | ttk::style element create Horizontal.Progressbar.trough image $I(hor-basic) \ 396 | -sticky ew 397 | 398 | ttk::style element create Horizontal.Progressbar.pbar image $I(hor-accent) \ 399 | -sticky ew 400 | 401 | ttk::style element create Vertical.Progressbar.trough image $I(vert-basic) \ 402 | -sticky ns 403 | 404 | ttk::style element create Vertical.Progressbar.pbar image $I(vert-accent) \ 405 | -sticky ns 406 | 407 | # Entry 408 | ttk::style element create Entry.field \ 409 | image [list $I(box-basic) \ 410 | {focus hover} $I(box-accent) \ 411 | invalid $I(box-invalid) \ 412 | disabled $I(box-basic) \ 413 | focus $I(box-accent) \ 414 | hover $I(box-hover) \ 415 | ] -border 5 -padding {8} -sticky news 416 | 417 | # Combobox 418 | ttk::style map TCombobox -selectbackground [list \ 419 | {!focus} $colors(-selectbg) \ 420 | {readonly hover} $colors(-selectbg) \ 421 | {readonly focus} $colors(-selectbg) \ 422 | ] 423 | 424 | ttk::style map TCombobox -selectforeground [list \ 425 | {!focus} $colors(-selectfg) \ 426 | {readonly hover} $colors(-selectfg) \ 427 | {readonly focus} $colors(-selectfg) \ 428 | ] 429 | 430 | ttk::style element create Combobox.field \ 431 | image [list $I(box-basic) \ 432 | {readonly disabled} $I(rect-basic) \ 433 | {readonly pressed} $I(rect-basic) \ 434 | {readonly focus hover} $I(button-hover) \ 435 | {readonly focus} $I(button-hover) \ 436 | {readonly hover} $I(button-hover) \ 437 | {focus hover} $I(box-accent) \ 438 | readonly $I(rect-basic) \ 439 | invalid $I(box-invalid) \ 440 | disabled $I(box-basic) \ 441 | focus $I(box-accent) \ 442 | hover $I(box-hover) \ 443 | ] -border 5 -padding {8} 444 | 445 | ttk::style element create Combobox.button \ 446 | image [list $I(combo-button-basic) \ 447 | {!readonly focus} $I(combo-button-focus) \ 448 | {readonly focus} $I(combo-button-hover) \ 449 | {readonly hover} $I(combo-button-hover) 450 | ] -border 5 -padding {2 6 6 6} 451 | 452 | ttk::style element create Combobox.arrow image $I(down) \ 453 | -width 15 -sticky e 454 | 455 | # Spinbox 456 | ttk::style element create Spinbox.field \ 457 | image [list $I(box-basic) \ 458 | invalid $I(box-invalid) \ 459 | disabled $I(box-basic) \ 460 | focus $I(box-accent) \ 461 | hover $I(box-hover) \ 462 | ] -border 5 -padding {8} -sticky news 463 | 464 | ttk::style element create Spinbox.uparrow \ 465 | image [list $I(up) \ 466 | disabled $I(up) \ 467 | pressed $I(up-accent) \ 468 | active $I(up-accent) \ 469 | ] -border 4 -width 15 -sticky e 470 | 471 | ttk::style element create Spinbox.downarrow \ 472 | image [list $I(down) \ 473 | disabled $I(down) \ 474 | pressed $I(down-accent) \ 475 | active $I(down-accent) \ 476 | ] -border 4 -width 15 -sticky e 477 | 478 | ttk::style element create Spinbox.button \ 479 | image [list $I(combo-button-basic) \ 480 | {!readonly focus} $I(combo-button-focus) \ 481 | {readonly focus} $I(combo-button-hover) \ 482 | {readonly hover} $I(combo-button-hover) 483 | ] -border 5 -padding {2 6 6 6} 484 | 485 | # Sizegrip 486 | ttk::style element create Sizegrip.sizegrip image $I(size) \ 487 | -sticky ewns 488 | 489 | # Separator 490 | ttk::style element create Horizontal.separator image $I(separator) 491 | 492 | ttk::style element create Vertical.separator image $I(separator) 493 | 494 | # Card 495 | ttk::style element create Card.field image $I(card) \ 496 | -border 10 -padding 4 -sticky news 497 | 498 | # Labelframe 499 | ttk::style element create Labelframe.border image $I(card) \ 500 | -border 5 -padding 4 -sticky news 501 | 502 | # Notebook 503 | ttk::style element create Notebook.client \ 504 | image $I(notebook) -border 5 505 | 506 | ttk::style element create Notebook.tab \ 507 | image [list $I(tab-disabled) \ 508 | selected $I(tab-basic) \ 509 | active $I(tab-hover) \ 510 | ] -border 5 -padding {14 4} 511 | 512 | # Treeview 513 | ttk::style element create Treeview.field image $I(card) \ 514 | -border 5 515 | 516 | ttk::style element create Treeheading.cell \ 517 | image [list $I(tree-basic) \ 518 | pressed $I(tree-pressed) 519 | ] -border 5 -padding 4 -sticky ewns 520 | 521 | ttk::style element create Treeitem.indicator \ 522 | image [list $I(right) \ 523 | user2 $I(empty) \ 524 | user1 $I(down) \ 525 | ] -width 26 -sticky {} 526 | 527 | ttk::style configure Treeview -background $colors(-bg) 528 | ttk::style configure Treeview.Item -padding {2 0 0 0} 529 | ttk::style map Treeview \ 530 | -background [list selected $colors(-selectbg)] \ 531 | -foreground [list selected $colors(-selectfg)] 532 | 533 | # Panedwindow 534 | # Insane hack to remove clam's ugly sash 535 | ttk::style configure Sash -gripcount 0 536 | } 537 | } 538 | -------------------------------------------------------------------------------- /tests/themes/theme/dark/box-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/box-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/box-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/box-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/box-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/box-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/box-invalid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/box-invalid.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/button-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/button-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/card.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/check-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/check-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/check-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/check-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/check-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/check-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/check-tri-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/check-tri-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/check-tri-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/check-tri-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/check-tri-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/check-tri-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/circle-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/circle-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/circle-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/circle-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/circle-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/circle-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/combo-button-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/combo-button-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/combo-button-focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/combo-button-focus.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/combo-button-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/combo-button-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/down-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/down-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/down.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/empty.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/hor-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/hor-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/hor-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/hor-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/hor-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/hor-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/notebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/notebook.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/off-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/off-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/on-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/on-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/on-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/on-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/outline-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/outline-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/outline-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/outline-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/radio-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/radio-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/radio-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/radio-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/radio-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/radio-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/radio-tri-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/radio-tri-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/radio-tri-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/radio-tri-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/radio-tri-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/radio-tri-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/rect-accent-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/rect-accent-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/rect-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/rect-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/rect-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/rect-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/rect-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/rect-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/right.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/scale-hor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/scale-hor.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/scale-vert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/scale-vert.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/separator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/separator.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/size.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/size.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/tab-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/tab-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/tab-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/tab-disabled.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/tab-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/tab-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/tick-hor-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/tick-hor-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/tick-hor-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/tick-hor-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/tick-hor-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/tick-hor-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/tick-vert-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/tick-vert-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/tick-vert-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/tick-vert-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/tick-vert-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/tick-vert-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/tree-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/tree-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/tree-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/tree-pressed.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/up-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/up-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/up.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/vert-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/vert-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/vert-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/vert-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/dark/vert-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/dark/vert-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light.tcl: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021 rdbende 2 | 3 | # The Azure theme is a beautiful modern ttk theme inspired by Microsoft's fluent design. 4 | 5 | package require Tk 8.6 6 | 7 | namespace eval ttk::theme::azure-light { 8 | variable version 2.0 9 | package provide ttk::theme::azure-light $version 10 | 11 | ttk::style theme create azure-light -parent clam -settings { 12 | proc load_images {imgdir} { 13 | variable I 14 | foreach file [glob -directory $imgdir *.png] { 15 | set img [file tail [file rootname $file]] 16 | set I($img) [image create photo -file $file -format png] 17 | } 18 | } 19 | 20 | load_images [file join [file dirname [info script]] light] 21 | 22 | array set colors { 23 | -fg "#000000" 24 | -bg "#ffffff" 25 | -disabledfg "#737373" 26 | -disabledbg "#ffffff" 27 | -selectfg "#ffffff" 28 | -selectbg "#007fff" 29 | } 30 | 31 | ttk::style layout TButton { 32 | Button.button -children { 33 | Button.padding -children { 34 | Button.label -side left -expand true 35 | } 36 | } 37 | } 38 | 39 | ttk::style layout Toolbutton { 40 | Toolbutton.button -children { 41 | Toolbutton.padding -children { 42 | Toolbutton.label -side left -expand true 43 | } 44 | } 45 | } 46 | 47 | ttk::style layout TMenubutton { 48 | Menubutton.button -children { 49 | Menubutton.padding -children { 50 | Menubutton.indicator -side right 51 | Menubutton.label -side right -expand true 52 | } 53 | } 54 | } 55 | 56 | ttk::style layout TOptionMenu { 57 | OptionMenu.button -children { 58 | OptionMenu.padding -children { 59 | OptionMenu.indicator -side right 60 | OptionMenu.label -side right -expand true 61 | } 62 | } 63 | } 64 | 65 | ttk::style layout Accent.TButton { 66 | AccentButton.button -children { 67 | AccentButton.padding -children { 68 | AccentButton.label -side left -expand true 69 | } 70 | } 71 | } 72 | 73 | ttk::style layout TCheckbutton { 74 | Checkbutton.button -children { 75 | Checkbutton.padding -children { 76 | Checkbutton.indicator -side left 77 | Checkbutton.label -side right -expand true 78 | } 79 | } 80 | } 81 | 82 | ttk::style layout Switch.TCheckbutton { 83 | Switch.button -children { 84 | Switch.padding -children { 85 | Switch.indicator -side left 86 | Switch.label -side right -expand true 87 | } 88 | } 89 | } 90 | 91 | ttk::style layout Toggle.TButton { 92 | ToggleButton.button -children { 93 | ToggleButton.padding -children { 94 | ToggleButton.label -side left -expand true 95 | } 96 | } 97 | } 98 | 99 | ttk::style layout TRadiobutton { 100 | Radiobutton.button -children { 101 | Radiobutton.padding -children { 102 | Radiobutton.indicator -side left 103 | Radiobutton.label -side right -expand true 104 | } 105 | } 106 | } 107 | 108 | ttk::style layout Vertical.TScrollbar { 109 | Vertical.Scrollbar.trough -sticky ns -children { 110 | Vertical.Scrollbar.thumb -expand true 111 | } 112 | } 113 | 114 | ttk::style layout Horizontal.TScrollbar { 115 | Horizontal.Scrollbar.trough -sticky ew -children { 116 | Horizontal.Scrollbar.thumb -expand true 117 | } 118 | } 119 | 120 | ttk::style layout TCombobox { 121 | Combobox.field -sticky nswe -children { 122 | Combobox.padding -expand true -sticky nswe -children { 123 | Combobox.textarea -sticky nswe 124 | } 125 | } 126 | Combobox.button -side right -sticky ns -children { 127 | Combobox.arrow -sticky nsew 128 | } 129 | } 130 | 131 | ttk::style layout TSpinbox { 132 | Spinbox.field -sticky nsew -children { 133 | Spinbox.padding -expand true -sticky nswe -children { 134 | Spinbox.textarea -sticky nswe 135 | } 136 | 137 | } 138 | Spinbox.button -side right -sticky ns -children { 139 | null -side right -children { 140 | Spinbox.uparrow -side top 141 | Spinbox.downarrow -side bottom 142 | } 143 | } 144 | } 145 | 146 | ttk::style layout Horizontal.TSeparator { 147 | Horizontal.separator -sticky nswe 148 | } 149 | 150 | ttk::style layout Vertical.TSeparator { 151 | Vertical.separator -sticky nswe 152 | } 153 | 154 | ttk::style layout Horizontal.Tick.TScale { 155 | Horizontal.TickScale.trough -sticky ew -children { 156 | Horizontal.TickScale.slider -sticky w 157 | } 158 | } 159 | 160 | ttk::style layout Vertical.Tick.TScale { 161 | Vertical.TickScale.trough -sticky ns -children { 162 | Vertical.TickScale.slider -sticky n 163 | } 164 | } 165 | 166 | ttk::style layout Card.TFrame { 167 | Card.field { 168 | Card.padding -expand 1 169 | } 170 | } 171 | 172 | ttk::style layout TLabelframe { 173 | Labelframe.border { 174 | Labelframe.padding -expand 1 -children { 175 | Labelframe.label -side right 176 | } 177 | } 178 | } 179 | 180 | ttk::style layout TNotebook.Tab { 181 | Notebook.tab -children { 182 | Notebook.padding -side top -children { 183 | Notebook.label -side top -sticky {} 184 | } 185 | } 186 | } 187 | 188 | ttk::style layout Treeview.Item { 189 | Treeitem.padding -sticky nswe -children { 190 | Treeitem.indicator -side left -sticky {} 191 | Treeitem.image -side left -sticky {} 192 | Treeitem.text -side left -sticky {} 193 | } 194 | } 195 | 196 | 197 | # Elements 198 | 199 | # Button 200 | ttk::style configure TButton -padding {8 4 8 4} -width -10 -anchor center 201 | 202 | ttk::style element create Button.button image \ 203 | [list $I(rect-basic) \ 204 | {selected disabled} $I(rect-basic) \ 205 | disabled $I(rect-basic) \ 206 | selected $I(rect-basic) \ 207 | pressed $I(rect-basic) \ 208 | active $I(button-hover) \ 209 | ] -border 4 -sticky ewns 210 | 211 | # Toolbutton 212 | ttk::style configure Toolbutton -padding {8 4 8 4} -width -10 -anchor center 213 | 214 | ttk::style element create Toolbutton.button image \ 215 | [list $I(empty) \ 216 | {selected disabled} $I(empty) \ 217 | disabled $I(empty) \ 218 | selected $I(rect-basic) \ 219 | pressed $I(rect-basic) \ 220 | active $I(rect-basic) \ 221 | ] -border 4 -sticky ewns 222 | 223 | # Menubutton 224 | ttk::style configure TMenubutton -padding {8 4 4 4} 225 | 226 | ttk::style element create Menubutton.button \ 227 | image [list $I(rect-basic) \ 228 | disabled $I(rect-basic) \ 229 | pressed $I(rect-basic) \ 230 | active $I(button-hover) \ 231 | ] -border 4 -sticky ewns 232 | 233 | ttk::style element create Menubutton.indicator \ 234 | image [list $I(down) \ 235 | active $I(down) \ 236 | pressed $I(down) \ 237 | disabled $I(down) \ 238 | ] -width 15 -sticky e 239 | 240 | # OptionMenu 241 | ttk::style configure TOptionMenu -padding {8 4 4 4} 242 | 243 | ttk::style element create OptionMenu.button \ 244 | image [list $I(rect-basic) \ 245 | disabled $I(rect-basic) \ 246 | pressed $I(rect-basic) \ 247 | active $I(button-hover) \ 248 | ] -border 4 -sticky ewns 249 | 250 | ttk::style element create OptionMenu.indicator \ 251 | image [list $I(down) \ 252 | active $I(down) \ 253 | pressed $I(down) \ 254 | disabled $I(down) \ 255 | ] -width 15 -sticky e 256 | 257 | # AccentButton 258 | ttk::style configure Accent.TButton -padding {8 4 8 4} -width -10 -anchor center 259 | 260 | ttk::style element create AccentButton.button image \ 261 | [list $I(rect-accent) \ 262 | {selected disabled} $I(rect-accent-hover) \ 263 | disabled $I(rect-accent-hover) \ 264 | selected $I(rect-accent) \ 265 | pressed $I(rect-accent) \ 266 | active $I(rect-accent-hover) \ 267 | ] -border 4 -sticky ewns 268 | 269 | # Checkbutton 270 | ttk::style configure TCheckbutton -padding 4 271 | 272 | ttk::style element create Checkbutton.indicator image \ 273 | [list $I(box-basic) \ 274 | {alternate disabled} $I(check-tri-basic) \ 275 | {selected disabled} $I(check-basic) \ 276 | disabled $I(box-basic) \ 277 | {pressed alternate} $I(check-tri-hover) \ 278 | {active alternate} $I(check-tri-hover) \ 279 | alternate $I(check-tri-accent) \ 280 | {pressed selected} $I(check-hover) \ 281 | {active selected} $I(check-hover) \ 282 | selected $I(check-accent) \ 283 | {pressed !selected} $I(rect-hover) \ 284 | active $I(box-hover) \ 285 | ] -width 26 -sticky w 286 | 287 | # Switch 288 | ttk::style element create Switch.indicator image \ 289 | [list $I(off-basic) \ 290 | {selected disabled} $I(on-basic) \ 291 | disabled $I(off-basic) \ 292 | {pressed selected} $I(on-hover) \ 293 | {active selected} $I(on-hover) \ 294 | selected $I(on-accent) \ 295 | {pressed !selected} $I(off-hover) \ 296 | active $I(off-hover) \ 297 | ] -width 46 -sticky w 298 | 299 | # ToggleButton 300 | ttk::style configure Toggle.TButton -padding {8 4 8 4} -width -10 -anchor center 301 | 302 | ttk::style element create ToggleButton.button image \ 303 | [list $I(rect-basic) \ 304 | {selected disabled} $I(rect-accent-hover) \ 305 | disabled $I(rect-basic) \ 306 | {pressed selected} $I(rect-basic) \ 307 | {active selected} $I(rect-accent) \ 308 | selected $I(rect-accent) \ 309 | {pressed !selected} $I(rect-accent) \ 310 | active $I(rect-basic) \ 311 | ] -border 4 -sticky ewns 312 | 313 | # Radiobutton 314 | ttk::style configure TRadiobutton -padding 4 315 | 316 | ttk::style element create Radiobutton.indicator image \ 317 | [list $I(outline-basic) \ 318 | {alternate disabled} $I(radio-tri-basic) \ 319 | {selected disabled} $I(radio-basic) \ 320 | disabled $I(outline-basic) \ 321 | {pressed alternate} $I(radio-tri-hover) \ 322 | {active alternate} $I(radio-tri-hover) \ 323 | alternate $I(radio-tri-accent) \ 324 | {pressed selected} $I(radio-hover) \ 325 | {active selected} $I(radio-hover) \ 326 | selected $I(radio-accent) \ 327 | {pressed !selected} $I(circle-hover) \ 328 | active $I(outline-hover) \ 329 | ] -width 26 -sticky w 330 | 331 | # Scrollbar 332 | ttk::style element create Horizontal.Scrollbar.trough image $I(hor-basic) \ 333 | -sticky ew 334 | 335 | ttk::style element create Horizontal.Scrollbar.thumb \ 336 | image [list $I(hor-accent) \ 337 | disabled $I(hor-basic) \ 338 | pressed $I(hor-hover) \ 339 | active $I(hor-hover) \ 340 | ] -sticky ew 341 | 342 | ttk::style element create Vertical.Scrollbar.trough image $I(vert-basic) \ 343 | -sticky ns 344 | 345 | ttk::style element create Vertical.Scrollbar.thumb \ 346 | image [list $I(vert-accent) \ 347 | disabled $I(vert-basic) \ 348 | pressed $I(vert-hover) \ 349 | active $I(vert-hover) \ 350 | ] -sticky ns 351 | 352 | # Scale 353 | ttk::style element create Horizontal.Scale.trough image $I(scale-hor) \ 354 | -border 5 -padding 0 355 | 356 | ttk::style element create Horizontal.Scale.slider \ 357 | image [list $I(circle-accent) \ 358 | disabled $I(circle-basic) \ 359 | pressed $I(circle-hover) \ 360 | active $I(circle-hover) \ 361 | ] -sticky {} 362 | 363 | ttk::style element create Vertical.Scale.trough image $I(scale-vert) \ 364 | -border 5 -padding 0 365 | 366 | ttk::style element create Vertical.Scale.slider \ 367 | image [list $I(circle-accent) \ 368 | disabled $I(circle-basic) \ 369 | pressed $I(circle-hover) \ 370 | active $I(circle-hover) \ 371 | ] -sticky {} 372 | 373 | # Tickscale 374 | ttk::style element create Horizontal.TickScale.trough image $I(scale-hor) \ 375 | -border 5 -padding 0 376 | 377 | ttk::style element create Horizontal.TickScale.slider \ 378 | image [list $I(tick-hor-accent) \ 379 | disabled $I(tick-hor-basic) \ 380 | pressed $I(tick-hor-hover) \ 381 | active $I(tick-hor-hover) \ 382 | ] -sticky {} 383 | 384 | ttk::style element create Vertical.TickScale.trough image $I(scale-vert) \ 385 | -border 5 -padding 0 386 | 387 | ttk::style element create Vertical.TickScale.slider \ 388 | image [list $I(tick-vert-accent) \ 389 | disabled $I(tick-vert-basic) \ 390 | pressed $I(tick-vert-hover) \ 391 | active $I(tick-vert-hover) \ 392 | ] -sticky {} 393 | 394 | # Progressbar 395 | ttk::style element create Horizontal.Progressbar.trough image $I(hor-basic) \ 396 | -sticky ew 397 | 398 | ttk::style element create Horizontal.Progressbar.pbar image $I(hor-accent) \ 399 | -sticky ew 400 | 401 | ttk::style element create Vertical.Progressbar.trough image $I(vert-basic) \ 402 | -sticky ns 403 | 404 | ttk::style element create Vertical.Progressbar.pbar image $I(vert-accent) \ 405 | -sticky ns 406 | 407 | # Entry 408 | ttk::style element create Entry.field \ 409 | image [list $I(box-basic) \ 410 | {focus hover} $I(box-accent) \ 411 | invalid $I(box-invalid) \ 412 | disabled $I(box-basic) \ 413 | focus $I(box-accent) \ 414 | hover $I(box-hover) \ 415 | ] -border 5 -padding {8} -sticky news 416 | 417 | # Combobox 418 | ttk::style map TCombobox -selectbackground [list \ 419 | {!focus} $colors(-selectbg) \ 420 | {readonly hover} $colors(-selectbg) \ 421 | {readonly focus} $colors(-selectbg) \ 422 | ] 423 | 424 | ttk::style map TCombobox -selectforeground [list \ 425 | {!focus} $colors(-selectfg) \ 426 | {readonly hover} $colors(-selectfg) \ 427 | {readonly focus} $colors(-selectfg) \ 428 | ] 429 | 430 | ttk::style element create Combobox.field \ 431 | image [list $I(box-basic) \ 432 | {readonly disabled} $I(rect-basic) \ 433 | {readonly pressed} $I(rect-basic) \ 434 | {readonly focus hover} $I(button-hover) \ 435 | {readonly focus} $I(button-hover) \ 436 | {readonly hover} $I(button-hover) \ 437 | {focus hover} $I(box-accent) \ 438 | readonly $I(rect-basic) \ 439 | invalid $I(box-invalid) \ 440 | disabled $I(box-basic) \ 441 | focus $I(box-accent) \ 442 | hover $I(box-hover) \ 443 | ] -border 5 -padding {8} 444 | 445 | ttk::style element create Combobox.button \ 446 | image [list $I(combo-button-basic) \ 447 | {!readonly focus} $I(combo-button-focus) \ 448 | {readonly focus} $I(combo-button-hover) \ 449 | {readonly hover} $I(combo-button-hover) 450 | ] -border 5 -padding {2 6 6 6} 451 | 452 | ttk::style element create Combobox.arrow image $I(down) \ 453 | -width 15 -sticky e 454 | 455 | # Spinbox 456 | ttk::style element create Spinbox.field \ 457 | image [list $I(box-basic) \ 458 | invalid $I(box-invalid) \ 459 | disabled $I(box-basic) \ 460 | focus $I(box-accent) \ 461 | hover $I(box-hover) \ 462 | ] -border 5 -padding {8} -sticky news 463 | 464 | ttk::style element create Spinbox.uparrow \ 465 | image [list $I(up) \ 466 | disabled $I(up) \ 467 | pressed $I(up-accent) \ 468 | active $I(up-accent) \ 469 | ] -border 4 -width 15 -sticky e 470 | 471 | ttk::style element create Spinbox.downarrow \ 472 | image [list $I(down) \ 473 | disabled $I(down) \ 474 | pressed $I(down-accent) \ 475 | active $I(down-accent) \ 476 | ] -border 4 -width 15 -sticky e 477 | 478 | ttk::style element create Spinbox.button \ 479 | image [list $I(combo-button-basic) \ 480 | {!readonly focus} $I(combo-button-focus) \ 481 | {readonly focus} $I(combo-button-hover) \ 482 | {readonly hover} $I(combo-button-hover) 483 | ] -border 5 -padding {2 6 6 6} 484 | 485 | # Sizegrip 486 | ttk::style element create Sizegrip.sizegrip image $I(size) \ 487 | -sticky ewns 488 | 489 | # Separator 490 | ttk::style element create Horizontal.separator image $I(separator) 491 | 492 | ttk::style element create Vertical.separator image $I(separator) 493 | 494 | # Card 495 | ttk::style element create Card.field image $I(card) \ 496 | -border 10 -padding 4 -sticky news 497 | 498 | # Labelframe 499 | ttk::style element create Labelframe.border image $I(card) \ 500 | -border 5 -padding 4 -sticky news 501 | 502 | # Notebook 503 | ttk::style element create Notebook.client \ 504 | image $I(notebook) -border 5 505 | 506 | ttk::style element create Notebook.tab \ 507 | image [list $I(tab-disabled) \ 508 | selected $I(tab-basic) \ 509 | active $I(tab-hover) \ 510 | ] -border 5 -padding {14 4} 511 | 512 | # Treeview 513 | ttk::style element create Treeview.field image $I(card) \ 514 | -border 5 515 | 516 | ttk::style element create Treeheading.cell \ 517 | image [list $I(tree-basic) \ 518 | pressed $I(tree-pressed) 519 | ] -border 5 -padding 4 -sticky ewns 520 | 521 | ttk::style element create Treeitem.indicator \ 522 | image [list $I(right) \ 523 | user2 $I(empty) \ 524 | user1 $I(down) \ 525 | ] -width 26 -sticky {} 526 | 527 | ttk::style configure Treeview -background $colors(-bg) 528 | ttk::style configure Treeview.Item -padding {2 0 0 0} 529 | ttk::style map Treeview \ 530 | -background [list selected #ccc] \ 531 | -foreground [list selected $colors(-fg)] 532 | 533 | # Panedwindow 534 | # Insane hack to remove clam's ugly sash 535 | ttk::style configure Sash -gripcount 0 536 | } 537 | } 538 | -------------------------------------------------------------------------------- /tests/themes/theme/light/box-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/box-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/light/box-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/box-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/light/box-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/box-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light/box-invalid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/box-invalid.png -------------------------------------------------------------------------------- /tests/themes/theme/light/button-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/button-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light/card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/card.png -------------------------------------------------------------------------------- /tests/themes/theme/light/check-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/check-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/light/check-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/check-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/light/check-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/check-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light/check-tri-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/check-tri-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/light/check-tri-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/check-tri-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/light/check-tri-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/check-tri-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light/circle-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/circle-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/light/circle-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/circle-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/light/circle-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/circle-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light/combo-button-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/combo-button-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/light/combo-button-focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/combo-button-focus.png -------------------------------------------------------------------------------- /tests/themes/theme/light/combo-button-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/combo-button-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light/down-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/down-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/light/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/down.png -------------------------------------------------------------------------------- /tests/themes/theme/light/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/empty.png -------------------------------------------------------------------------------- /tests/themes/theme/light/hor-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/hor-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/light/hor-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/hor-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/light/hor-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/hor-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light/notebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/notebook.png -------------------------------------------------------------------------------- /tests/themes/theme/light/off-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/off-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/light/off-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/off-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light/on-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/on-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/light/on-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/on-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/light/on-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/on-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light/outline-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/outline-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/light/outline-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/outline-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light/radio-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/radio-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/light/radio-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/radio-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/light/radio-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/radio-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light/radio-tri-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/radio-tri-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/light/radio-tri-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/radio-tri-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/light/radio-tri-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/radio-tri-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light/rect-accent-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/rect-accent-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light/rect-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/rect-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/light/rect-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/rect-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/light/rect-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/rect-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light/right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/right.png -------------------------------------------------------------------------------- /tests/themes/theme/light/scale-hor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/scale-hor.png -------------------------------------------------------------------------------- /tests/themes/theme/light/scale-vert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/scale-vert.png -------------------------------------------------------------------------------- /tests/themes/theme/light/separator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/separator.png -------------------------------------------------------------------------------- /tests/themes/theme/light/size.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/size.png -------------------------------------------------------------------------------- /tests/themes/theme/light/tab-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/tab-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/light/tab-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/tab-disabled.png -------------------------------------------------------------------------------- /tests/themes/theme/light/tab-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/tab-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light/tick-hor-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/tick-hor-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/light/tick-hor-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/tick-hor-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/light/tick-hor-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/tick-hor-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light/tick-vert-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/tick-vert-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/light/tick-vert-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/tick-vert-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/light/tick-vert-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/tick-vert-hover.png -------------------------------------------------------------------------------- /tests/themes/theme/light/tree-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/tree-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/light/tree-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/tree-pressed.png -------------------------------------------------------------------------------- /tests/themes/theme/light/up-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/up-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/light/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/up.png -------------------------------------------------------------------------------- /tests/themes/theme/light/vert-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/vert-accent.png -------------------------------------------------------------------------------- /tests/themes/theme/light/vert-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/vert-basic.png -------------------------------------------------------------------------------- /tests/themes/theme/light/vert-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cutwell/python-auto-gui/7f62cae035ff2d42252b8edc745a5a59bc911f46/tests/themes/theme/light/vert-hover.png --------------------------------------------------------------------------------