Tukaan is the new framework that aims to replace Tkinter

Overview

Tukaan

Code style: black

Tukaan is the new, pythonic and colorful (like a keel-billed toucan) framework that aims to replace Tkinter. It has everything (on my computer, not at GitHub) that you need to develop cross-platform GUIs.

WIP

Although all the basic widgets and other classes already exist in my local repo, they are not yet ready to push them to GitHub. I only push things to GitHub that work and can be tried, but they are still in progress, so you shouldn’t use it in any project.

The goal of Tukaan

The goal of Tukaan is to be an easy-to-use, powerful and pythonic alternative to Tkinter.

Tkinter is just a wrapper around Tk, that is so thin, that you can see through it, and even has holes on it. If you have ever used Tkinter, you know, it's kinda dumb. There are a lot of things not implemented in Tkinter, you can only access them with Tcl calls. Tukaan has everything you could need, and maybe even more.

In Tcl almost everything is represented as strings, and Tkinter doesn't convert them to Python objects, so you have to do that yourself. If you mess something up, it won't raise a Python exception, but Tcl a error, which you don't know what's wrong even if you know the Tcl language. Tkinter also looks awful by default. You can change this, if you use the the Ttk extensions. But why should you use extensions to make your GUI not look like it came from the 90's?

With Tukaan this is completely different. With it, the app looks native by default on Windows and on Mac OS as well. Unfortunately this isn't possible on Linux, but it uses a better theme than the Tk default.

Simple example

import tukaan

class MyApp(tukaan.App):
    def __init__(self):
        tukaan.App.__init__(self, title="My nice little Tukaan app")

        self.position = "center"

        self.button = tukaan.Button(self, text="Button")
        self.button.callback = lambda: print("ok")

        self.pack_widgets()
	
    def pack_widgets(self):
        self.button.pack()


def main():
    MyApp().run()

if __name__ == "__main__":
    main() 

Some very nice things in tukaan

Get clipboard content

print(tukaan.Clipboard.get())

# or

print(tukaan.Clipboard.content)

When was the user last active on the computer

print("User last active", tukaan.App().user_last_active, "seconds ago.")

Centering a window on the screen

For some reason it doesn't work sometimes

app = tukaan.App()
app.position = "center"

Color conversions

>> (0, 127, 255) print(color.hsv) >>> (210, 100, 100) print(color.cmyk) >>> (100, 50, 0, 0) ">
color = tukaan.Color("#007fff")
print(color.rgb)
>>> (0, 127, 255)
print(color.hsv)
>>> (210, 100, 100)
print(color.cmyk)
>>> (100, 50, 0, 0)

Screen information

screen = tukaan.Screen()
print(screen.width)
>>> 1920
print(screen.height)
>>> 1080
print(screen.dpi)
>>> 72

Credits

Many thing in Tukaan is based on:

Comments
  • packaging: migrate to a setup.cfg build

    packaging: migrate to a setup.cfg build

    TkDND is quite a big dependency which actually needs to be platform specific to reduce the size of the distribution wheels. I think you should move them to libtukaan.

    The other option is you keep them in tukaan, but then to reduce the distribution size, we need to fallback to setup.py based packaging.

    opened by demberto 23
  • change: use properties & descriptors

    change: use properties & descriptors

    Changed many / almost all getter / setter functions to either properties or descriptors. Using descriptors for a library like this will vastly reduce boilerplate.

    This is a BIG change. I might have unknowingly broken some code, since there were a lot of type errors, but I did check for references majority of the times.

    Tbh, the descriptors are placed a little randomly across modules, as I implemented them wherever required. I think there are just too many modules. The number of modules needs to be reduced and the scope of objects (variables / constants / functions / classes / modules) needs to be better indicated by a _ prefix to imply internal code.

    Apart from this, I personally have faced a lot of issues dealing with private variables for caching and public properties for exposing them. It might have been a different case for you but, imo private variables are best avoided wherever possible.

    opened by demberto 10
  • Add Mica effect, titlebar customization

    Add Mica effect, titlebar customization

    Hi!

    Could someone with Windows 11 build 22000 or above test the following two snippets for me?

    I don't have this build, and installing a new Windows build is kinda pain, so I'd be really grateful, if you someone could test them, and give feedback. Thanks!

    You can just download the 2022-02-16 branch, and run this two code to test it.

    Mica

    This code should add a Mica effect to the window, and remove it after 10 seconds.

    import tukaan
    
    app = tukaan.App(title="Test titlebar and window border customization")
    
    app.set_backdrop_effect("mica")
    
    tukaan.Timeout(10, lambda: app.set_backdrop_effect(None)).start()
    
    app.run()
    
    

    Titlebar bg, fg and window border:

    import tukaan
    
    app = tukaan.App(title="Test titlebar and window border customization")
    
    app.Titlebar.bg_color = tukaan.Color("#ffc568")
    app.Titlebar.fg_color = tukaan.Color("#6667ab")
    app.border_color = tukaan.Color("#007fff")
    
    app.run()
    

    I'm not sure, if I implemented the bg, fg and border color functions correctly, and the colors may be something completely else. Here's how they should look: asdf | color --- | --- titlebar should be this color | ffc568 titlebar text should be this color | 6667ab window border should be this color | 007fff

    help wanted 
    opened by rdbende 10
  • Add audio playback/record/manipulation features

    Add audio playback/record/manipulation features

    Audio in Tukaan

    Tukaan uses the awesome Snack Tk extension internally to play, record and manipulate audio. Unfortunately the Snack project is inactive since 2005, so I had to modify it a bit because it used deprecated, and removed ALSA functions. I also removed MP3/MPEG support, because it would require GPL license, and currently OGG/Vorbis and NIST/Sphere codecs aren't included.

    The Snack backend is implemented as a Git submodule, the repo can be found at github.com/tukaan/Snack

    Supported filetypes: Read: aiff, au, csl, sd, smp, snd, wav, and raw binary Write: aiff, au, csl, smp, snd, wav, and raw binary

    Basics

    from tukaan import Time, Timer
    from tukaan.audio import Filter, Sound
    
    sound = Sound()  # Create an empty sound object
    
    # --- OR ---
    
    sound = Sound(Path("/home/rdbende/Music/Elefánt/Kardhal.wav"))  # Load sound from file
    
    sound.play(Time[3:40])  # Play sound, starting at 3:40
    
    sound.convert("mono", sample_rate=16000)  # Convert sound to mono, 16kHz sample rate
    sound.save("./music.au")  # Save sound in a different format
    
    with Sound() as s:  # Deletes sound when __exit__ing
        s.play(block=True)
    

    Record audio

    sound = Sound()
    
    with sound.record():  # Stops the recording when __exit__ing
        Timer.wait(10)  # Wait for 10 seconds until it is recording
    
    # --- OR ---
    
    sound.start_recording(input="plughw:1")  # Start recording (without context) on the specified input device
    

    Do things with two sounds

    sound_1 = Sound()
    sound_2 = Sound()
    
    sound_1 += sound_2  # Concatenate sound
    
    sound_1 &= sound_2  # Mix sounds
    
    sound_1.insert(Time[2:34], sound_2)  # Insert a sound at 2:34
    

    Slicing a sound

    sound = Sound()
    
    sound[Time[1:23]:Time[4:56]]
    # Returns a SoundSection object (NOT a Sound object with that sound range!)
    # So you can modify the specified section of the original sound object (apply a filter, cut, crop, play and save)
    
    
    sound[Time[1:23]:Time[4:56]].detached
    # Returns a stand-alone Sound object containing the specified range from the original sound object
    
    sound[Time[1:23]:Time[4:56]]  # From 1:23 to 4:56
    sound[88200:Time[4:56]]  # From sample #88200 to to 4:56
    sound[Time[1:23]:...]  # From 1:23 to end of sound
    sound[...:Time[4:56]]  # From start of sound to 4:56
    # I know, you got it ;)
    

    Filters

    sound = Sound()
    
    # Apply filter to the sound
    sound @= Filter.Echo()
    
    # Chaining filters
    sound @= Filter.FadeIn() & Filter.Echo()  # Returns a ComposeFilter
    
    # Apply filter only to the playback
    with Filter.Reverb():
        sound.play()
    

    Available filters: Amplifier, Echo, FadeIn, FadeOut, Formant, Generator, IIR, MixChannels and Reverb

    Time

    Time[17:42:38]  # hours:minutes:seconds
    

    I created a time object too, to easily specify positions in the Sound. I could use datetime.time, but I don't like how it works.

    datetime.time.fromisoformat("01:23:45")
    

    You need separate method to be able to write a time as 1:23:45, and you need to use a string, so I just don't like it. I wanted to be able to write a time as Time(1:23:45). Of course, this is invalid syntax, but you can write Time[1:23:45] which will be interpreted as a slice. Unfortunately I can't make a Date object like this, because Date(2022/3/12) will be interpreted as a division anyways, so 🌻

    # These 3 are all the same
    
    time = tukaan.Time[1:23:45]
    
    time = tukaan.Time(1, 23, 45)
    
    time = tukaan.Time(hours=1, minutes=23, seconds=45)
    
    opened by rdbende 4
  • The first example in the readme fails with

    The first example in the readme fails with "TypeError: grid() got an unexpected keyword argument 'column'"

    The problem is in the following line:

    self.button.layout.grid(row=0, column=0, margin=(1, 2, 3, 4))
    

    There is no column parameter in the Grid.grid method, there is col instead.

    But I wonder, isn't it better to use full names like "column" or "columnspan"?

    opened by insolor 4
  • tukaan.exceptions.TclError: Serif: Unsupported platform windows-x64

    tukaan.exceptions.TclError: Serif: Unsupported platform windows-x64

    I cant run any Tukaan code on windows? Help

    import tukaan
    
    # Create window
    app = tukaan.App("Test TabView widget")
    
    # Create tabview
    tabview = tukaan.TabView(app)
    tabview.grid()
    
    # Create tabs
    tab_1 = tabview.Tab("Tab 1")
    tab_2 = tabview.Tab("Tab 2")
    
    # Add tab contents
    tukaan.Button(tab_1, "Button in tab 1").grid()  # You can display it inline, but then you can't access the object later
    tukaan.Button(tab_2, "Button in tab 2").grid()
    
    app.run()
    
    
    opened by PyHubs 2
  • Allow wildcard imports? 🤔

    Allow wildcard imports? 🤔

    When I create an app with tkinter I normally will start the file with from tkinter import * so it gets rid of the hassle of importing labels and buttons and whatnot. We need to make that compatible and work with Tukaan. Great job on the release by the way!

    further info 
    opened by Moosems 2
  • `tukaan.App` is crazy inefficient

    `tukaan.App` is crazy inefficient

    https://github.com/tukaan/tukaan/blob/fcf7ff97fe14da80d7f0d8b71e74c28d839e24f6/tukaan/app.py#L56-L70

    $ cat test.py
    import tukaan, tkinter, timeit
    
    
    def asdf():
        _ = tukaan.App()
        _.quit()
    
    
    def qwer():
        _ = tkinter.Tk()
        _.quit()
    
    
    print(timeit.timeit(asdf, number=100))
    print(timeit.timeit(qwer, number=100))
    
    $ python3 test.py
    can't invoke "event" command: application has been destroyed
        while executing
    "event generate $w <<ThemeChanged>>"
        (procedure "ttk::ThemeChanged" line 6)
        invoked from within
    "ttk::ThemeChanged"
    [...] * 99
    10.320173018000037  # tukaan
    2.983373939999933   # tkinter
    

    without those lines, tukaan is only between 2.9 and 3.3 seconds

    Times

    • with tukaan I never got below 2.9 (commented out those lines)
    • with tkinter I never got below 2.7
    • (with teek I never got below 3.3)
    opened by rdbende 2
  • AttributeError: partially initialized module 'tukaan' has no attribute 'App' (most likely due to a circular import)

    AttributeError: partially initialized module 'tukaan' has no attribute 'App' (most likely due to a circular import)

    I just follow the example given in ReadMeto try this module at the first time.

    import tukaan
    
    app = tukaan.App("My first Tukaan app")
    
    app.run()
    

    Then I get this error.

    
    (env) D:\Desktop\coding\sandbox>d:/Desktop/coding/discordpy/env/Scripts/python.exe d:/Desktop/coding/sandbox/tukaan.py
    Traceback (most recent call last):
      File "d:\Desktop\coding\sandbox\tukaan.py", line 1, in <module>
        import tukaan
      File "d:\Desktop\coding\sandbox\tukaan.py", line 3, in <module>
        app = tukaan.App("My first Tukaan app")
    AttributeError: partially initialized module 'tukaan' has no attribute 'App' (most likely due to a circular import)
    

    I am new to this module and I have no idea about why would this happens. Sorry for my incoveniences causes.

    opened by lmjaedentai 1
  • Add Windows blur

    Add Windows blur

    New feature to blur the window background on Windows.

    This API is kinda broken in Windows itself, and Microsoft hasn't documented it anywhere.

    Some documentation

    w.enable_bg_blur(tint, tint_opacity, effect)

    arg | type | description | default -- | -- | -- | -- tint | tukaan.Color | Color used to color the background. If None, current window bg color is used. | Current window bg tint_opacity | float | How much to color the background, on a range between 0 and 1. 0 = no color (transparent), 1 = only color (opaque) | 0.2 effect | tukaan.DwmBlurEffect | Sets what effect to use 👇 | DwmBlurEffect.BLUR (blur + tint with opacity)

    DwmBlurEffect (it's an enum) attributes
    
    DwmBlurEffect.DISABLED           -> no effect
    DwmBlurEffect.OPAQUE_COLOR       -> tint only
    DwmBlurEffect.TRANSPARENT_COLOR  -> tint with opacity
    DwmBlurEffect.BLUR               -> blur + tint with opacity
    DwmBlurEffect.ACRYLIC            -> acrylic blur + tint with opacity
    

    w.disable_bg_blur()

    Remove blur effect.

    Example

    import tukaan
    
    with tukaan.App(title="Nice little blur") as app:
        app.enable_bg_blur(tint=tukaan.Color("#6667ab"), tint_opacity=0.4)
        tukaan.Timeout(3, app.disable_bg_blur).start()
    

    Small hack (not really a hack by now)

    How to make acrylic effect?

    For acrylic effect you can use the effect argument, and set it to tukaan.DwmBlurEffect.ACRYLIC. This acrylic effect is available since Windows 10 1803, but it's incredibly laggy on all Windows 10 systems. Works well on Windows 11 though.

    opened by rdbende 1
  • Font management

    Font management

    I have no better idea than what teek does.

    Usually you don't need a named, mutable font object, just an object to specify the widget font, so a tcl namedfont is a total waste of memory. On the other hand it isn't good to have multiple font classes to different tasks.

    opened by rdbende 1
  • Add `Canvas` and `OpenGLCanvas` widgets

    Add `Canvas` and `OpenGLCanvas` widgets

    TODO:

    • Features of the traditional canvas widget: https://www.tcl.tk/man/tcl8.6/TkCmd/canvas.html

    • Features of the TkPath canvas widget https://github.com/avarga/tkpath/blob/master/doc/readme.adoc

    • OpenGL rendering

      • [ ] OpenGlCanvas class
      • [ ] moderngl or pyopengl? Moderngl is faster and more pythonic, but then we have to implement every platform specific stuff manually (context creation, makecurrent and swapbuffer)
    • Implement new dynamic theming engine using tkp::surface

    TODO in TkPath:

    • [ ] Add to libtukaan. Currently I have only a local .so
    • [ ] Some commands cause segfaults randomly. I've put some TODO comments to them
    • [ ] Finish partially or not implemented features

    Done (at least partially):

    These things need to be tested and possibly bugfixed

    • Canvas items
      • [x] Line (connects two points)
      • [x] Vector (has a length and a angle) See comment about these two in items.py
      • [x] Polygonal line
      • [x] Rectangle
      • [x] Square (rectangle subclass)
      • [x] Ellipse
      • [x] Circle (ellipse subclass)
      • [x] Polygon
      • [x] Text
      • [x] Image
      • [x] Path
      • [x] Item group
    • Utility classes
      • [x] Arrowheads
      • [x] Stroke patterns
      • [x] Transformations
      • [x] Pen (to draw object stroke)
      • [x] Brush (to draw object fill)
    • [x] TkPath works on Linux
    opened by rdbende 3
  • `LabeledView` widget

    `LabeledView` widget

    a.k.a labelframe. It could be really similar to the Frame (probably they should even be in the same file), but with a title attribute (a TextProp from _props.py. It should also inherit Frame.

    enhancement good first issue widget 
    opened by rdbende 0
  • `ButtonGroup` widget

    `ButtonGroup` widget

    A group of buttons, similar to RadioGroup. The button labels and callbacks could be specified in a dict, like items={"Text": do_something}.

    The leftmost button should have the Left.TButton style, the rightmost Right.TButton, and all the others Middle.TButton (similar stuff when the orientation is vertical), this way it's possible to do, that only the outer buttons have round corners. (I think my forest theme has this feature, but it might be only in one of my local branches).

    enhancement good first issue widget 
    opened by rdbende 0
  • High DPI support

    High DPI support

    • [ ] High DPI awareness High DPI awareness should be enabled on Windows by default
    • [ ] Scaling
      • [ ] Implement UI scaling
      • [ ] Support SVG based themes
      • [ ] Create SVG based sun valley theme
    good first issue 
    opened by rdbende 2
  • Accessibility

    Accessibility

    • [ ] Screen reader support I'm not sure... https://sourceforge.net/p/tcl/mailman/tcl-core/thread/8c01c04a-7c44-89a6-e2b4-90e919e37f63%40codebykevin.com/#msg36955189
    opened by rdbende 0
Releases(v0.2.0.retrigger)
  • v0.2.0.retrigger(Dec 22, 2022)

  • v0.2.0(Dec 22, 2022)

    Lots of breaking changes.

    What's Changed

    • change: use properties & descriptors by @demberto in https://github.com/tukaan/tukaan/pull/104
    • cleanup by @rdbende in https://github.com/tukaan/tukaan/pull/105
    • Bit of refactor on window stuff by @rdbende in https://github.com/tukaan/tukaan/pull/106
    • Add theming by @rdbende in https://github.com/tukaan/tukaan/pull/108
    • Fix a lotta bugs, add some tests by @rdbende in https://github.com/tukaan/tukaan/pull/110
    • Add filedialogs by @rdbende in https://github.com/tukaan/tukaan/pull/89
    • Check non-pip dependencies in setup.py by @rdbende in https://github.com/tukaan/tukaan/pull/117

    New Contributors

    • @demberto made their first contribution in https://github.com/tukaan/tukaan/pull/104

    Full Changelog: https://github.com/tukaan/tukaan/compare/v0.1.3...v0.2.0

    Source code(tar.gz)
    Source code(zip)
  • v0.1.3(Aug 30, 2022)

    What's Changed

    • Improved tooltips
    • Built-in dependency troubleshooting stuff
    • Update font file stuff and move to libtukaan by @rdbende in https://github.com/tukaan/tukaan/pull/100

    Full Changelog: https://github.com/tukaan/tukaan/compare/v0.1.1...v0.1.2

    Source code(tar.gz)
    Source code(zip)
  • v0.1.2(Aug 30, 2022)

    What's Changed

    • Improved tooltips
    • Built-in dependency troubleshooting stuff
    • Update font file stuff and move to libtukaan by @rdbende in https://github.com/tukaan/tukaan/pull/100

    Full Changelog: https://github.com/tukaan/tukaan/compare/v0.1.1...v0.1.2

    Source code(tar.gz)
    Source code(zip)
  • v0.1.1(Jul 3, 2022)

    What's Changed

    • Add ToolTip class by @Moosems in https://github.com/tukaan/tukaan/pull/80
    • Update Serif to work on macOS in 5ce336e

    New Contributors

    • @Moosems made their first contribution in https://github.com/tukaan/tukaan/pull/80 🎉

    Full Changelog: https://github.com/tukaan/tukaan/compare/v0.1.0...v0.1.1

    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(Jul 2, 2022)

    !! Not backwards-compatible !!

    What's Changed

    • Rewrite quasi everything by @rdbende in https://github.com/tukaan/tukaan/pull/82

    Full Changelog: https://github.com/tukaan/tukaan/compare/v0.0.1.dev1...v0.1.0

    * There's no multiline textbox widget at the moment, however the Entry widget was renamed to TextBox, this might be confusing 😕 The multiline text widget will return, but in a revised form, at least until it is merged into the Tcl/Tk core

    Source code(tar.gz)
    Source code(zip)
  • v0.0.1.dev1(Jun 5, 2022)

  • v0.0.1.dev0(Apr 22, 2022)

    This is the first release of Tukaan! ✨🥳 Tukaan website: https://tukaan.github.io Pypi project link: https://pypi.org/project/tukaan

    Feedback is welcome!

    Source code(tar.gz)
    Source code(zip)
Owner
Tukaan
Tukaan is the new framework that aims to replace Tkinter
Tukaan
The quick and easy way to add versatile graphical interfaces with networking capabilities to your Python programs.

The quick and easy way to add versatile graphical interfaces with networking capabilities to your Python programs. Give instant access to your application to whoever you want on the Internet, without

Claude SIMON 215 Dec 28, 2022
GUI Pancakeswap 2 and Uniswap 3 SNIPER BOT 🥇 🏆 🥇

GUI Pancakeswap V2 and Uniswap V3 trading client (and bot) MOST ADVANCE TRADING BOT SUPPORT WINDOWS LINUX MAC (BUY TOKEN ON LAUNCH)

HYDRA 16 Dec 21, 2021
Textual is a TUI (Text User Interface) framework for Python inspired by modern web development.

Textual is a TUI (Text User Interface) framework for Python inspired by modern web development.

Will McGugan 17.1k Jan 08, 2023
GUI Python Auto text bot.

Bagel Text Bot Auto text bot. Written in Python. Contributing Pull requests are welcome. For major changes, please open an issue first to discuss what

Toby 3 May 14, 2022
A calculator made using Python and Tkinter

Abacus Abacus is a calculator used to compute expressions with the operators of Addition, Subtraction, Multiplication and Division. It is named after

0 Jun 24, 2022
A Minimalistic Backup GUI for your Windows, Mac or Linux

BlobBackup is a minimalistic backup utility for your Windows, Mac or Linux computer. With an excellent engine, extensive storage support, and an easy

Bimba Shrestha 283 Nov 30, 2022
Create custom desktop notificatons using python

Create custom desktop notificatons using python In this video i am going to use a module called plyer

Niranjan 2 Dec 15, 2021
Function-Plotter - GUI Application to plot math Functions

Function Plotter GUI Application to plot a user given function How to run instal

1 May 05, 2022
This repository contains some projects that I have done using Python + Tkinter.

This repository contains some projects that I have done using Python + Tkinter.

João Victor Vilela dos Santos 1 Nov 10, 2021
A tf publisher gui tool for ROS, which publish /tf_static message. The software is based on PyQt5.

tf_publisher_gui for ROS Introduction How to use cd catkin_ws/src git clone https://github.com/yinwu33/tf_publisher_gui.git cd catkin_ws catkin_make s

yinwu33 7 Dec 28, 2022
A Simple GUI application to organize and store accounts/passwords.

PyssView A Simple GUI application to organize and store accounts/passwords. Install/Run (Linux) Via script This way will install a binary version and

Jefferson Richard Dias 1 Nov 24, 2021
GlobalProtectGUI is a simple tray app to connect, disconnect and monitor globalprotect VPN connection.

Simple GlobalProtectGUI GlobalProtectGUI is simple tray app to connect, disconnect and monitor globalprotect VPN connection. Installation Required bef

Aleksandar Dostic 11 Oct 07, 2022
This is the new and improved Plex Automatic Pre-roll script with a GUI

Rollarr This is the new and improved Automatic Pre-roll script with a GUI for Plex now called Rollarr! It should be stable but if you find a bug pleas

164 Nov 04, 2022
UberGui is a lightweight multi-threaded, webRender UI module for TouchDesigner

UberGui V4 UberGui is a lightweight multi-threaded, webRender UI module for TouchDesigner projects. The aim is to solve the trifecta of challenges bui

LUCAS M MORGAN 48 Nov 20, 2022
A really minimalistic operating system made using python's GUI module Tkinter.

BoxOS V1.0.0 About A really minimalistic operating system made using python's GUI module Tkinter. What seperates it from the other operating systems m

Fahim 2 Dec 08, 2022
A quick GUI script to pseudo-anonymize patient videos for use in the GRK

grk_patient_sorter A quick GUI script to pseudo-anonymize patient videos for use in the GRK. Source directory — the highest level folder that will be

Peter Somers 1 Dec 09, 2021
Tukaan is the new framework that aims to replace Tkinter

Tukaan is the new, pythonic and colorful (like a keel-billed toucan) framework that aims to replace Tkinter. It has everything (on my computer, not at GitHub) that you need to develop cross-platform

Tukaan 101 Jan 08, 2023
GUI based app made in python using tkinter

Virtual Keyboard A GUI application made in python using tkinter This is my first ever proper GUI based application project after learning tkinter rece

AbhineetK 10 Dec 10, 2022
Awesome examples for my Sun Valley ttk theme!

Sun Valley ttk theme examples This is the examples repo for my stunning Sun Valley ttk theme! Be sure to start and atch this repo, because I will uplo

rdbende 117 Jan 03, 2023
Transparent & click through tkinter window. WINDOWS ONLY

REQUIREMENTS: WINDOWS ONLY pip install pywin32 NOTES: Will not work on top of a fullscreen application, if you are using this to draw on top of a gam

francis 2 Nov 04, 2022