可以使用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设置透明度。
答案 0 :(得分:3)
是的,这是可能的。您可以使用style=wx.TRANSPARENT_WINDOW
示例代码:我使panel1
透明,并为topPanel
提供了绿色。这就是为什么你在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()
答案 1 :(得分:3)
特定于平台的窗口可以并且可以变得透明。
CanSetTransparent
方法允许您检查是否可以在运行时切换窗口的透明度。如果它返回false,SetTransparent
将(通常)不执行任何操作,并且您不应该调用它。
脱离我的头顶(但不要引用我的话 - 它必须在某处记录,但我无法找到它......):
然而,Windows是一个特例。虽然您无法切换子窗口的透明度,或将其设置为百分比,但可以在创建时使其完全透明,如ρss's answer所示
所以,如果那是你正在寻找的东西,并且你想尽可能地做到这一点,你会想要这样的东西:
style = wx.TRANSPARENT_WINDOW if sys.platform.lower() == 'win32' else 0
panel1 = wx.Panel(topPanel, -1, style=style)
if panel1.CanSetTransparent:
panel1.SetTransparent(100)