首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wxpython: wxpython中的透明面板

wxpython: wxpython中的透明面板
EN

Stack Overflow用户
提问于 2015-04-29 11:02:22
回答 2查看 7K关注 0票数 3

在wxpython中使用SetTransparent(val)可以使整个帧透明。但我能在里面做一个透明的面板吗?

我试过使用panelobj.SetTransparent(val),但那行不通。

代码语言:javascript
复制
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设置透明度。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-29 11:36:41

它是特定于平台的窗口可以和不能变得透明。

CanSetTransparent方法允许您检查是否可以在运行时切换窗口的透明度。如果它返回false,SetTransparent将(通常)什么也不做,您不应该调用它。

从我的头顶(但不要引用我的这一点-它必须有文件的某处,但我找不到它…):

  • Mac与Cocoa构建:任何东西都可以透明。
  • Mac带有碳构建(现在没有人使用了):只有顶层的窗口才能透明。
  • 窗口:只有顶层窗口才能透明。
  • 带有排序器的X11 :任何东西都可以透明。
  • 没有排序器的X11 :没有任何东西是透明的。
  • Wayland (还在实验中):任何事情都可以透明。

然而,Windows是一个特例。虽然不能切换子窗口的透明度或将其设置为百分比,但可以在创建时使其完全透明,如ρss的答案所示。

所以,如果这就是你想要的,并且你想要尽可能的移植,你会想要这样的东西:

代码语言:javascript
复制
style = wx.TRANSPARENT_WINDOW if sys.platform.lower() == 'win32' else 0
panel1 = wx.Panel(topPanel, -1, style=style)
if panel1.CanSetTransparent:
    panel1.SetTransparent(100)
票数 4
EN

Stack Overflow用户

发布于 2015-04-29 11:20:17

是的是可能的。您可以使用窗户

示例代码:我使panel1变得透明,并将绿色赋予topPanel。这就是为什么在panel2上看到绿色的原因,因为panel1是透明的。

代码语言:javascript
复制
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()
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29941789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档