[PyQt] How to create non-stealing focus QFrame?
swdev.bali at gmail.com
swdev.bali at gmail.com
Sun Jul 6 15:48:45 BST 2014
Dear community,
I am trying to create a Windows application containing a QMainWindow that also open up several QFrame window containing some buttons in it. It sort of like a free floating tool window. But the problem is, when I click button on a floating QFrame, the main window lost its focus. Giving unpleasant experience to the user.
I have found an answer actually, that should’ve solve this problem: using win32con.WS_EX_NOACTIVATE. But somehow, I still unable to properly applied this extended style. This is the SO page containing this solution : http://stackoverflow.com/questions/18662031/avoid-application-activation-and-focus-in-when-clicking-buttons-on-it-windows/18774481?noredirect=1#comment38088304_18774481
This is my Python code using PyWin32 libraries to try to use that extended style:
def no_focus(self):
"""
TODO Suppose to create a non stealing focus window.
Not working yet
"""
import ctypes
import win32con
import win32gui
dc = win32gui.GetWindowDC(self.winId())
user32 = ctypes.windll.user32
existing_style = user32.GetWindowLongW(dc, win32con.GWL_EXSTYLE)
user32.SetWindowLongW(dc, win32con.GWL_EXSTYLE, existing_style | win32con.WS_EX_NOACTIVATE | win32con.WS_EX_TOOLWINDOW)
Based on that SO page, I have also try to override showEvent(), but to no result:
def showEvent(self, *args, **kwargs):
self.no_focus()
super(FSFloatingFrame, self).showEvent(*args)
My current partial solution, is to trap eventFilter for QEvent.WindowActivate in my tool window base class, and activateWindow() for the mainwindow. But it also stop all the buttons from functioning.
def eventFilter(self, object, QEvent):
if QEvent.type() == QEvent.WindowActivate:
#this half solve the problem: window won't steal focus: but it also make no action to the buttons
#self.mainwindow.activateWindow()
pass
return super(FSFloatingFrame, self).eventFilter(object, QEvent)
Any suggestion on this particular case?
I am quite wonder whether tool window that behave like it’s a tool window (non stealing focus) have already been provided by Qt…
Thanks in advance!
Eko
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20140706/7ca02edd/attachment.html>
More information about the PyQt
mailing list