[PySide] how to suppress qwidget's drop shadow under windows?

Frank Rueter | OHUfx frank at ohufx.com
Sat Jul 12 06:02:35 CEST 2014


I see. That makes sense.
Unfortunately the ActionChanged event is not triggered in all cases that 
I need to hook into, so will keep investigating.

Cheers,
frank

On 12/07/14 1:59 PM, Tony Barbieri wrote:
> Ah, maybe because in this example our QWidget is actually a top level 
> Window...
>
>
> On Fri, Jul 11, 2014 at 11:30 PM, Frank Rueter | OHUfx 
> <frank at ohufx.com <mailto:frank at ohufx.com>> wrote:
>
>     Ah, thanks for confirming that.
>
>     Interestingly I don't get a WindowDeactivate event when I click
>     outside of the widget. I do get a ActionChanged event though, but
>     that doesn't sound right for this.
>
>
>
>     On 12/07/14 1:14 PM, Tony Barbieri wrote:
>>     Btw, the shadow stuff is actually at the Windows level.  You'd
>>     have to do some pretty low level hacks to remove it from what I
>>     understand.  That or force everyone to turn off drop shadows in
>>     their Windows theme :).
>>
>>
>>     On Fri, Jul 11, 2014 at 11:13 PM, Tony Barbieri
>>     <greatrgb at gmail.com <mailto:greatrgb at gmail.com>> wrote:
>>
>>         Yea, that is one downside.  We worked around it by doing the
>>         following:
>>
>>         |class  ClosePopupFilter(QtCore.QObject):
>>
>>              def  eventFilter(self, target, event):
>>                  if  event.type() == QtCore.QEvent.WindowDeactivate:
>>                      target.close()
>>                  return  False
>>
>>         class  Popup(QtGui.QWidget):
>>
>>              def  __init__(self, parent=None):
>>                  super(Popup, self).__init__(parent)
>>
>>                  self.__popup_filter = ClosePopupFilter()
>>                  self.installEventFilter(self.__popup_filter)
>>
>>
>>                  self.setWindowFlags(QtCore.Qt.FramelessWindowHint |
>>                                           QtCore.Qt.WindowStaysOnTopHint |
>>                                           QtCore.Qt.CustomizeWindowHint |
>>                                           QtCore.Qt.Tool)
>>         |
>>
>>         ‚Äč
>>
>>
>>         On Fri, Jul 11, 2014 at 10:51 PM, Frank Rueter | OHUfx
>>         <frank at ohufx.com <mailto:frank at ohufx.com>> wrote:
>>
>>             Ah, thanks.
>>             one issue I see the Qt.Tool flag is that it won't close
>>             the widget when I click outside of it, something the
>>             Qt.Popup flag does for me.
>>
>>             But I guess I can re-implement one of the event handles
>>             to reproduce this behaviour. MIght be easier than hunting
>>             down whatever would suppress the shadow in the default
>>             palette.
>>
>>             Cheers,
>>             frank
>>
>>
>>             On 12/07/14 12:28 PM, Tony Barbieri wrote:
>>>             Hey Frank,
>>>
>>>             Checkout this page: http://qt-project.org/doc/qt-4.8/qt.html
>>>
>>>             Here is the description for those two flags:
>>>
>>>             Qt::Popup 	0x00000008 | Window 	Indicates that the
>>>             widget is a pop-up top-level window, i.e. that it is
>>>             modal, but has a window system frame appropriate for
>>>             pop-up menus.
>>>             Qt::Tool 	0x0000000a | Window 	Indicates that the widget
>>>             is a tool window. A tool window is often a small window
>>>             with a smaller than usual title bar and decoration,
>>>             typically used for collections of tool buttons. If there
>>>             is a parent, the tool window will always be kept on top
>>>             of it. If there isn't a parent, you may consider using
>>>             Qt::WindowStaysOnTopHint as well. If the window system
>>>             supports it, a tool window can be decorated with a
>>>             somewhat lighter frame. It can also be combined with
>>>             Qt::FramelessWindowHint.
>>>
>>>             Glad it helped!
>>>
>>>             Best,
>>>
>>>
>>>
>>>             On Fri, Jul 11, 2014 at 9:54 PM, Frank Rueter | OHUfx
>>>             <frank at ohufx.com <mailto:frank at ohufx.com>> wrote:
>>>
>>>                 Great, that did in deed fix it, thanks so much!!
>>>                 Can somebody explain what those two flags actually
>>>                 try to do? I'm still finding it difficult to find
>>>                 comprehensive documentation about flags in general.
>>>
>>>
>>>                 Cheers,
>>>                 frank
>>>
>>>                 On 11/07/14 11:23 PM, Tony Barbieri wrote:
>>>>                 Hey Frank,
>>>>
>>>>                 I'm pretty sure we use the QtCore.Qt.Tool flag
>>>>                 rather than the QtCore.Qt.Popup flag to deal with
>>>>                 removing the shadow.  If that doesn't work I can
>>>>                 look deeper into how we've dealt with this.
>>>>
>>>>                 Best,
>>>>
>>>>
>>>>                 On Thu, Jul 10, 2014 at 11:15 PM, Frank Rueter |
>>>>                 OHUfx <frank at ohufx.com <mailto:frank at ohufx.com>> wrote:
>>>>
>>>>                     Hi all,
>>>>
>>>>                     I was given some code that uses a QWidget,
>>>>                     makes it completely
>>>>                     transparent, then adds a custom paintEvent to
>>>>                     draw some custom items.
>>>>                     This is meant or a fancy right click menu.
>>>>                     Under OSX it ll looks swell,
>>>>                     but under windows I get the default drop
>>>>                     shadow, because of the
>>>>                     QtCore.Qt.Popup flag.
>>>>                     e.g.:
>>>>                     class MyMenu(PySide.QtGui.QWidget):
>>>>
>>>>                        def __init__(self):
>>>>                      QtGui.QWidget.__init__(self)
>>>>                      self.setAttribute(QtCore.Qt.WA_TranslucentBackground,
>>>>                     True)
>>>>                      self.setWindowFlags(QtCore.Qt.Popup |
>>>>                     QtCore.Qt.FramelessWindowHint)
>>>>
>>>>                     w = MyMenu()
>>>>                     w = show()
>>>>
>>>>                     What is the easiest way to turn off that off
>>>>                     (drop shadows for
>>>>                     transparent widgets just look irritating :-D )?
>>>>                     I guess I could inherit
>>>>                     from QMenu instead of QWidget but would expect
>>>>                     more work to get it to
>>>>                     it's current state and am not entirely sure if
>>>>                     that would fix the issue.
>>>>
>>>>                     Any ideas?
>>>>
>>>>                     Cheers,
>>>>                     frank
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>                     _______________________________________________
>>>>                     PySide mailing list
>>>>                     PySide at qt-project.org
>>>>                     <mailto:PySide at qt-project.org>
>>>>                     http://lists.qt-project.org/mailman/listinfo/pyside
>>>>
>>>>
>>>>
>>>>
>>>>                 -- 
>>>>                 Tony
>>>
>>>
>>>
>>>
>>>             -- 
>>>             Tony
>>
>>
>>
>>
>>         -- 
>>         Tony
>>
>>
>>
>>
>>     -- 
>>     Tony
>
>
>
>
> -- 
> Tony

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20140712/b0785a89/attachment.html>


More information about the PySide mailing list