繁体   English   中英

wxpython:wxpython中的透明面板

[英]wxpython: Transparent panel in wxpython

使用wxpython中的SetTransparent(val)可以使整个框架透明。 但是我可以使其中一个面板透明吗?

我尝试使用panelobj.SetTransparent(val)但是没有用。

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title,size=(250, 250))

        topPanel = wx.Panel(self)

        panel1 = wx.Panel(topPanel, -1)
        panel1.SetTransparent(100)
        panel2 = wx.Panel(topPanel, -1)
        panel2.SetBackgroundColour('gray')

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(panel1,1,flag = wx.EXPAND|wx.ALL)
        sizer.Add(panel2,1,flag = wx.EXPAND|wx.ALL)

        topPanel.SetSizer(sizer)



class MyApp(wx.App):
     def OnInit(self):
         frame = MyFrame(None, -1, 'frame')
         frame.Show(True)
         return True

app = MyApp(0)
app.MainLoop()

假设我要为panel1设置透明度。

对的,这是可能的。 您可以使用style = wx.TRANSPARENT_WINDOW

示例代码 :我使panel1透明,并给topPanel绿色。 这就是为什么您在panel2顶部看到绿色的panel2因为panel1是透明的。

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title,size=(250, 250))
        topPanel = wx.Panel(self, -1)
        topPanel.SetBackgroundColour('green')
        panel1 = wx.Panel(topPanel, -1, style=wx.TRANSPARENT_WINDOW)
        #panel1.SetTransparent(100)
        panel2 = wx.Panel(topPanel, -1)
        panel2.SetBackgroundColour('gray')

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(panel1,1,flag = wx.EXPAND|wx.ALL)
        sizer.Add(panel2,1,flag = wx.EXPAND|wx.ALL)

        topPanel.SetSizer(sizer)



class MyApp(wx.App):
     def OnInit(self):
         frame = MyFrame(None, -1, 'frame')
         frame.Show(True)
         return True

app = MyApp(0)
app.MainLoop()

它是特定于平台的,哪些窗口可以透明,哪些窗口不能透明。

CanSetTransparent方法允许您检查是否可以在运行时切换窗口的透明度。 如果返回false,则SetTransparent (通常)将不执行任何操作,并且您不应调用它。

不在我的头上(但请不要在此引用我,它必须记录在某处,但我找不到它…):

  • 带有Cocoa构建的Mac OS X:任何东西都可以透明。
  • 带有Carbon版本的Mac OS X(不再使用):只有顶层窗口可以透明。
  • Windows:仅顶级窗口可以是透明的。
  • X11与合成器:任何东西都可以透明。
  • X11没有合成器:没有东西可以透明。
  • Wayland(尚在试验中):任何事物都可以透明。

但是,Windows是一种特殊情况。 虽然无法切换子窗口的透明度或将其设置为百分比,但是可以在创建时使其完全透明,如ρss的答案所示。

因此,如果这就是您要寻找的,并且您想尽可能地轻便地做到这一点,那么您将需要这样的东西:

style = wx.TRANSPARENT_WINDOW if sys.platform.lower() == 'win32' else 0
panel1 = wx.Panel(topPanel, -1, style=style)
if panel1.CanSetTransparent:
    panel1.SetTransparent(100)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM