source: framspy/gui/utils.py @ 1300

Last change on this file since 1300 was 1211, checked in by sz, 21 months ago

linux compatibility (can't use the window state "zoomed", some state changes need wait_visibility())

File size: 2.1 KB
RevLine 
[1198]1from threading import Timer
[1211]2import os
[1198]3
4class Swap:
5    def __init__(self, init = None) -> None:
6        self.init = init
7        self.clear()
8        self.select = False
9        self.empty = False
10
11    def update(self, new):
12        if not new:
13            if self.empty == False:
14                self.empty = True
15                return
16        else:
17            self.empty = False
18
19        if self.select:
20            self.one = new
21        else:
22            self.two = new
23        self.select = not self.select
24
25    def get(self):
26        if self.select:
27            return self.two
28        else:
29            return self.one
30
31    def clear(self):
32        self.one = self.init
33        self.two = self.init
34
[1202]35
[1198]36#source: https://gist.github.com/walkermatt/2871026
37def debounce(wait):
38    """ Decorator that will postpone a function's
39        execution until after wait seconds
40        have elapsed since the last time it was invoked. """
41    def decorator(fn):
42        def debounced(*args, **kwargs):
43            def call_it():
44                fn(*args, **kwargs)
45            try:
46                debounced.t.cancel()
47            except(AttributeError):
48                pass
49            debounced.t = Timer(wait, call_it)
50            debounced.t.start()
51        return debounced
[1202]52    return decorator
53
54
55# https://stackoverflow.com/questions/39058038/wm-attributes-and-zoomed-doesnt-work
56# https://stackoverflow.com/questions/18394597/is-there-a-way-to-create-transparent-windows-with-tkinter
57def windowHideAndMaximize(wnd): # to get the size of working area on screen (screen minus taskbars, toolbars etc.) - make invisible maximized window
[1211]58    if os.name=='posix':
59        wnd.wait_visibility()
[1202]60    wnd.attributes("-alpha", 0)
[1211]61    if os.name=='posix':
62        wnd.attributes("-zoomed", 1)
63    else:
64        wnd.state('zoomed')
[1202]65    wnd.update()
66
67def windowShowAndSetGeometry(wnd, geometry):
[1211]68    if os.name=='posix':
69        wnd.attributes("-zoomed", 0)
70        wnd.wait_visibility()
71    else:
72        wnd.state('normal')
[1202]73    wnd.update()
74    wnd.geometry(geometry)
75    wnd.attributes("-alpha", 1)
76    wnd.update()
Note: See TracBrowser for help on using the repository browser.