Cengizz
Cengizz

Reputation: 35

PySimpleGUI how to make transparent click-through window?

I want to draw a circle on the screen but it should be click-through and I should be able to click somethings behind in this circle. So far, I achieved to draw circle and made it transparent but i couldn't make it click-through. I know that it is possible with pywin32 win32con.WS_EX_LAYERED flag but there is no information about this on PySimpleGUI documentation. How can I solve this problem?

My current window configuration:

window = sg.Window('Sample window', layout,
                   keep_on_top=True,
                   auto_size_buttons=False,
                   grab_anywhere=False,
                   no_titlebar=True,
                   return_keyboard_events=False,
                   alpha_channel=0.8,
                   use_default_focus=False,
                   transparent_color='red',
                   finalize=True)

If it is not possible with PySimpleGUI, is it possible to do with pywin32 module combination?

Upvotes: 0

Views: 5725

Answers (2)

Michael Gregory
Michael Gregory

Reputation: 11

layout = [[sg.Button("Button) ],
    [sg.Graph(canvas_size =(400,100),
    graph_bottom_left=(-400,-400),
    graph_top_right=(400,400),
    background_color='red') ]]

window = sg.Window('Click through transparent',
  layout,background_color='red',keep_on_top=True,
  transparent_color='red', alpha_channel=.5,
  grab_anywhere=True, resizable=True).Finalize()

while True:
    event, values = window.Read()
    if event == sg.WIN_CLOSED:
        break 
    if event == 'Click':
        print(" Button Clicked")

Remember to put keep_on_top = True This works well on windows, don't know if other os

Upvotes: 0

Austin Miller
Austin Miller

Reputation: 21

The transparent_color property can be used to create "click-through" windows. All you need to do is make whatever you want to be click through the same color as the transparent_color. Here is an example where you can toggle the transparency of a shape in a canvas to the transparent color and make it click through.

import PySimpleGUI as sg
layout = [      
    [sg.Canvas(size=(100, 100), key= 'canvas',)],      
    [sg.T('Change circle color to:'), sg.Button('Red'), sg.Button('Blue')]      
    ]      

window = sg.Window('Sample window', layout,
               keep_on_top=True,
               auto_size_buttons=False,
               grab_anywhere=False,
               no_titlebar=True,
               return_keyboard_events=False,
               alpha_channel=0.8,
               use_default_focus=False,
               transparent_color='red',
               finalize=True)      
window.Finalize()      

canvas = window['canvas']     
cir = canvas.TKCanvas.create_oval(50, 50, 100, 100)      

while True:      
    event, values = window.read()      
    if event is None:      
        break      
    if event == 'Blue':      
        canvas.TKCanvas.itemconfig(cir, fill="Blue")      
    elif event == 'Red': 
        #Here is where the cirle changes to a recolor making it transparent and click through
        canvas.TKCanvas.itemconfig(cir, fill="Red")

Upvotes: 2

Related Questions