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

Tony Barbieri greatrgb at gmail.com
Sat Jul 12 05:59:44 CEST 2014


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>
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>
> 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>
>> 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>
>>> 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
>>>> > 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
>>>>> 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/20140711/9a772c2a/attachment.html>


More information about the PySide mailing list