Use win32 module to have a transparent Python window - python-3.x

I want to be able to have the Python program itself transparent, but all I could find was running other programs and making them transparent, which is not what I want to do. I just want to make the Python program itself transparent using the win32 module.

So after playing around with a test i did in pygame and reading the answer from here: https://stackoverflow.com/questions/4549213/make-a-window-transparent-using-win32
I managed to get it to work and I also can change colour with colorama so that's good. Here's my code:
import win32gui,win32api,win32con
hwnd = win32gui.FindWindow(None, title)
win32gui.SetWindowLong(hwnd, win32con.GWL_EXSTYLE, win32gui.GetWindowLong(hwnd, win32con.GWL_EXSTYLE) | win32con.WS_EX_LAYERED)
win32gui.SetLayeredWindowAttributes(hwnd, win32api.RGB(0,0,0), 180, win32con.LWA_ALPHA)
So for some strange reason whenever i try to make the program transparent before my loop starts in my program I get a error about "invalid window handle". I do change the program title but I change it before i try the transparency and i update the title with the trancparancy.

Related

How to change Python background to a certain colour with colorama?

I am using colorama to change the colour of my text and it works fines, but now I want to change the colour of the whole background instead of just my text.
I am using Windows:
import colorama
from colorama import Fore, Back, Style
colorama.init()
print(Back.GREEN)
print(Fore.RED)
But, that code only makes the text coloured. Is there a way to do that in python? I want it like CMD where you can have the background of it a colour. I cannot use the OS module as I do not have admin rights, but I'm open to using any other module.
How do I solve this problem?
After a while in playing with it i figured it out. Just forgot about this post. Here is what I did.
import colorama
from colorama import Back as bg
colorama.init()
print(bg.RED)
print(colorama.ansi.clear_screen())
I think clearing the screen fixed the Issue
After playing with colorama on my Windows 10 box it seems it's only used to change the text but not the console/terminal background. I was however able to change the background using this standard library solution:
import ctypes
try:
ctypes.windll.msvcrt.system(b"color 4f")
print("Hello World!")
except ValueError:
pass
The terminal background will change to red with white text.

How do you create a perfect pygame fullscreen?

I am making a game, and I want it to be fullscreen. However, the pygame fullscreen is strange, creating a screen too large. So I referred to this: Pygame FULLSCREEN Display Flag Creates A Game Screen That Is Too Large For The Screen. However, when I followed these instructions
import ctypes
ctypes.windll.user32.SetProcessDPIAware()
true_res = (ctypes.windll.user32.GetSystemMetrics(0), ctypes.windll.user32.GetSystemMetrics(1))
pygame.display.set_mode(true_res,pygame.FULLSCREEN)
from an answer (but instead using pywin32 instead of ctypes, like this: win32api.GetSystemMetric(0)).
I used this, and while it does create a fullscreen, it also creates a black border around my screen and enlarges everything a slight bit, including my cursor. How can I get rid of this black border and get all shapes to normal size? Or is there a better way to create a good fullscreen?
If it helps, I use Windows 10.
Thanks in advance!
I think the problem of enlarging everything arose with the use of ctypes module as because the ctypes module makes use of a function named as GetSystemMetrics() whose work is to get the size of the screen of your system.
And might be the import pygame is loading some dll that is not compatible with a dll that windll needs.
So I suggest either you update the ctype library or pygame library or update both libraries or you can enlarge screen size by providing custom width and height values according to the resolution supported by your system.
Hope this helps !!

OpenCV 3: Why does the UI render incorrectly?

I am a new to openCV and trying its examples from documentation. I am doing the trackbar as the color palette example.
But my UI renders in wrong order as well as crops the switch title: OFF.
where it is supposed to be like this.
I am using macbook pro with macOS 10.13.
OpenCV's Highgui module uses QT as a backend. QT renders elements differently depending on the OS that is using it. I believe that this is because QT uses UI elements that are native to the OS. So a frame in Windows will look like a Windows Frame, a frame in Linux will look like a Linux frame.
This is what the same example produces in Windows:
You can get the slider bars to fit the window by changing:
cv2.namedWindow('image')
to:
cv2.namedWindow('image',cv2.WND_PROP_AUTOSIZE)
Doing that produces this output (in Windows):

PyQt Matplotlib colour control

Writing in Python 2.7 using pyQt 4.8.5:
How may I alter the background and graph-area (foreground?) of a Matplotlib widget? I would like to make the background of the graph widget 'light gray' (same as the background colour of the GUI), and I would like to make the graph-area (see below) black.
I'm new to GUI programming with pyQt and would like to achieve this:
my code:
self.ui.graph.axes.clear()
self.ui.graph.axes.hold(True)
self.ui.graph.axes.plot(self.Value,'r-')
self.ui.graph.axes.grid()
self.ui.graph.draw()
This should do it:
ax = self.ui.graph.axes
ax.set_axis_bgcolor('k')
self.ui.graph.set_facecolor('none')
This did only partly work for me. The two first lines worked fine but the last did not work. The error I got was:
AttributeError: 'MatplotlibWidget' object has no attribute 'set_facecolor'
The solution was to add figure to the code:
ax = self.ui.graph.axes
ax.set_axis_bgcolor('k')
self.ui.graph.figure.set_facecolor('none')
An interesting note is that I had been trying to solve this problem by using setPalette() but this didn't work until the facecolor was set to 'none' then suddenly all the changes I had made to the palette showed up.

gtk3 transparent menu's

Is it possible in gtk3 to create a menu that is transparent? The underling window would use an image as it's background.
I can use a color for the window background but not a image.
I attempted to do what you said using an example from the gdk2 reference by adding a background image first and then porting it to gtk3. I'm no expert at gtk at all, but I did make it somehow compile:
http://pastebin.com/0XwUW5k3 (note that there has to be a "background.png" in the same folder)
The transparent dark rectangle holding the widgets is most likely the box; I tried settings its background color to full transparency as well, but it didn't work, and you'd probably have to do the composing/drawing of it yourself if you wanted it to be completely transparent, but that's not something I'd suggest because it seems too complex..
Also, you might want to create a background image with an already fitting resolution for the window, then you could skip the scaling part.
The scale function originally comes from this mailling-list thread

Resources