[英]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
(通常)将不执行任何操作,并且您不应调用它。
不在我的头上(但请不要在此引用我,它必须记录在某处,但我找不到它…):
但是,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.