Ich bin ein Neuling für wxpython. Ich kann die Panels nicht überlappen. Im Allgemeinen ist es leicht, dies mit zwei oder mehreren Panels zu tun, aber wenn in einem der Panels der MediaCtrl-Container Video auf dem gesamten Bildschirm anzeigt, ist darüber kein anderes Panel sichtbar. Ich habe es mit der panel.Raise() Methode versucht, aber es funktioniert immer noch nicht. Ich freue mich darauf, ein Dummy-Panel mit einem StaticText über das videoPlayer-Panel zu überlappen. Im folgenden Code wird die grüne Box unterhalb des MediaCtrl-Controllers angezeigt. Ich muss das Bannel Panel irgendwie über das Video Panel bringen. Ich habe eine Menge Fragen gestellt, aber alles, was ich bekommen konnte, ist die Verwendung von .Raise(), die in meinem Fall nicht funktioniert.WXPython Video MediaCtrl benutzerdefinierte Schaltfläche
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()
Hallo Nick, Danke für die Antwort. Aber mit BoxSizer im vertikalen Layout kommen beide Panels in einem vertikalen Layout, während ich versuche, das bannerPanel über das videoPlayerPanel zu bringen. – rohitranjan
Ich habe meine Antwort bearbeitet, ich denke, dass sie in einem separaten Sizer sein müssen, dann heben Sie den zweiten an. –
Hallo Nick, Danke, dass du dir das angeschaut hast. Ich habe versucht, mit dem oben genannten Code und idealerweise sollte Ihr Code mit den Panels mit Widgets wie Statictext, etc. arbeiten, aber ich denke, das Problem muss etwas speziell mit der wx.media.MediaCtrl tun, die ich für den Videoplayer und irgendwie es verwende erlaubt keine andere angehobene Ansicht/Platte darüber zu kommen. – rohitranjan