我是wxpython的新手。我无法重叠面板。一般来说,使用两个或多个面板很容易,但如果其中一个面板的MediaCtrl容器在整个显示屏幕上播放视频,则任何其他面板都不可见。我尝试了panel.Raise()方法,但仍然无法正常工作。 我期待的所有内容都是通过videoPlayer面板将静态文本与虚拟面板重叠。在下面的代码中,绿色框位于MediaCtrl控制器的下方。我必须以某种方式将视频面板上方的面板。我经历了很多问题,但我所能得到的只是使用.Raise(),而不是在我的情况下工作。WXPython视频MediaCtrl自定义按钮
import wx
import wx.media
import os
########################################################################
class MyPanel(wx.Panel):
""""""
# ----------------------------------------------------------------------
def __init__(self, parent):
""""""
wx.Panel.__init__(self, parent)
self.parent_size = parent.GetClientSize()
self.init_view()
def init_view(self):
#self.SetDimensions(0, 0, wx.GetDisplaySize().width, wx.GetDisplaySize().height)
self.SetDimensions(0, 0, 50,50)
self.text_view = wx.StaticText(self, size=(1020, 40), pos=(10, 10), label="Some Label")
self.mc = wx.media.MediaCtrl(self)
# from wx.animate import AnimationCtrl
# self.text_view.write("ABDS")
self.settings_btn = wx.Button(self, -1, "Settings")
self.Bind(wx.EVT_BUTTON, self.settings_button_clicked, self.settings_btn)
self.Bind(wx.EVT_LEFT_UP, self.on_panel_clicked)
print(os.path.exists("SampleVideo_1280x720_10mb.mp4"))
path = os.path.dirname(os.path.abspath("SampleVideo_1280x720_10mb.mp4")) + "/SampleVideo_1280x720_10mb.mp4"
if not self.mc.Load(path):
print("unable to load video")
else:
self.mc.SetInitialSize()
self.mc.Play()
def on_panel_clicked(self, event):
print("panel clicked...")
if self.settings_btn.IsShown():
self.settings_btn.Hide()
else:
self.settings_btn.Show()
def settings_button_clicked(self, event):
print("Settings Btn Clicked...")
class BannerPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.SetBackgroundColour("green")
self.SetDimensions(0, 0, 100, 100)
self.Raise()
#self.ToggleWindowStyle(wx.STAY_ON_TOP)
########################################################################
class MyFrame(wx.Frame):
""""""
# ----------------------------------------------------------------------
def __init__(self):
""""""
# wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN
wx.Frame.__init__(self, None, title="Test Maximize", size=wx.Size(1100, 700), style=wx.CLIP_CHILDREN)
self.videoPlayerPanel = MyPanel(self)
self.bannerPanel = BannerPanel(self)
self.Show()
# self.videoPlayerPanel.mc.Lower()
self.bannerPanel.Raise()
# print(self.GetClientSize())
# self.Maximize(True)
# self.initGUI()
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame()
# frame.ShowFullScreen(True)
app.MainLoop()
嗨,尼克,谢谢你的回复。但是在垂直布局中使用BoxSizer时,两个面板都以垂直布局进入,而我试图将bannerPanel放在videoPlayerPanel上方。 – rohitranjan
我编辑了我的回复,我认为他们可能需要分开调整大小,然后再提高第二个大小。 –
嗨,尼克,感谢您对此进行调查。我试着用上面的代码,理想情况下你的代码应该与面板一起使用像statictext等小部件面板,但我认为这个问题必须做一些特定的wx.media.MediaCtrl,我用于视频播放器,不知何故它不允许任何其他提出的观点/面板超过它。 – rohitranjan