Это примерно wx Python Как сделать так, чтобы одна панель появлялась поверх другой на оси z? Есть панель для видеоплеера. Я хочу, чтобы над панелью появилась еще одна панель. Как этого достичь? так же, как обычный видеоплеер или YouTube, в котором кнопки отображаются на видео панели.
import wx
import wx.xrc
import wx.media
class MainWindow(wx.Frame):
def __init__(self, parent):
self.seekmin = 0
self.seekmax = 0
self.seekpos = 0
self.maxVol = 0
self.minVol = 0
self.path = ''
wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=u"Media Player", pos=wx.DefaultPosition,
size=wx.Size(890, 400), style=wx.DEFAULT_FRAME_STYLE | wx.NO_BORDER | wx.TAB_TRAVERSAL)
self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_CAPTIONTEXT))
self.SetSizeHintsSz(wx.Size(890, 400), wx.DefaultSize)
bSizer2 = wx.BoxSizer(wx.VERTICAL)
bSizer3 = wx.BoxSizer(wx.HORIZONTAL)
self.VideoAreaSizer = wx.BoxSizer(wx.VERTICAL)
self.VideoSlider = wx.BoxSizer(wx.VERTICAL)
self.VideoAreaButtonSizer = wx.BoxSizer(wx.HORIZONTAL)
self.textAreaSizer = wx.BoxSizer(wx.VERTICAL)
self.textAreaButtonSizer = wx.BoxSizer(wx.HORIZONTAL)
self.Btn1 = wx.Button(self, label="clear", style=0, name="Button1")
self.Btn2 = wx.Button(self, label="save", style=0, name="Button2")
self.Btn3 = wx.Button(self, label="copy", style=0, name="Button3")
self.VideoPane = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL)
self.VideoPane.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_ACTIVECAPTION))
self.VideoPane.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_CAPTIONTEXT))
self.PlayerSize = self.VideoPane.GetSize()
self.player = wx.media.MediaCtrl(self.VideoPane, size=self.PlayerSize)
self.VideoAreaSizer.Add(self.VideoPane, 1, wx.EXPAND | wx.ALL, 5)
#bSizer3.Add(self.VideoAreaSizer, 2, wx.EXPAND | wx.ALL, 5)
self.TextArea = wx.TextCtrl(self, size=(200, 100), style=wx.TE_MULTILINE)
self.textAreaSizer.Add(self.TextArea, 1, wx.EXPAND | wx.ALL)
self.textAreaButtonSizer.Add(self.Btn1)
self.textAreaButtonSizer.Add(self.Btn2)
self.textAreaButtonSizer.Add(self.Btn3)
self.textAreaSizer.Add(self.textAreaButtonSizer, 0, wx.ALIGN_CENTER)
# self.t3 = wx.TextCtrl(self, size=(200, 100), style=wx.TE_MULTILINE)
#bSizer3.Add(self.VideoAreaSizer, 2, wx.EXPAND | wx.ALL, 5)
#bSizer3.Add(self.textAreaSizer, 1, wx.EXPAND | wx.ALL)
bSizer2.Add(bSizer3, 5, wx.EXPAND, 5)
# self.SeekBar = wx.Slider(self, 0, self.seekmin, self.seekmax, wx.SL_HORIZONTAL)
# self.VideoSlider.Add(self.SeekBar, 0, wx.ALL | wx.EXPAND, 5)
# self.VideoAreaButtonSizer.Add(self.VideoSlider,0)
# self.VideoAreaSizer.Add(self.VideoAreaButtonSizer, 0)
#
# bSizer3.Add(self.VideoAreaSizer, 2, wx.EXPAND | wx.ALL, 5)
# bSizer3.Add(self.textAreaSizer, 1, wx.EXPAND | wx.ALL)
# bSizer4 = wx.BoxSizer(wx.HORIZONTAL)
self.PlayBtn = wx.Button(self, wx.ID_ANY, u"Play", wx.DefaultPosition, wx.DefaultSize, 0)
self.VideoAreaButtonSizer.Add(self.PlayBtn, 0, wx.ALL, 5)
self.OpenBtn = wx.Button(self, wx.ID_ANY, u"Open", wx.DefaultPosition, wx.DefaultSize, 0)
self.VideoAreaButtonSizer.Add(self.OpenBtn, 0, wx.ALL, 5)
self.BackwardBtn = wx.Button(self, wx.ID_ANY, u"Backward", wx.DefaultPosition, wx.DefaultSize, 0)
self.VideoAreaButtonSizer.Add(self.BackwardBtn, 0, wx.ALL, 5)
self.ForwardBtn = wx.Button(self, wx.ID_ANY, u"Forward", wx.DefaultPosition, wx.DefaultSize, 0)
self.VideoAreaButtonSizer.Add(self.ForwardBtn, 0, wx.ALL, 5)
self.StopBtn = wx.Button(self, wx.ID_ANY, u"Extra Button", wx.DefaultPosition, wx.DefaultSize, 0)
self.VideoAreaButtonSizer.Add(self.StopBtn, 0, wx.ALL, 5)
self.SoundBar = wx.Slider(self, wx.SL_HORIZONTAL)
self.VideoAreaButtonSizer.Add(self.SoundBar, 0, wx.ALL, 5)
self.VideoAreaButtonSizer.Add(self.VideoSlider, 0)
self.VideoAreaSizer.Add(self.VideoAreaButtonSizer, 0)
bSizer3.Add(self.VideoAreaSizer, 2, wx.EXPAND | wx.ALL, 5)
bSizer3.Add(self.textAreaSizer, 1, wx.EXPAND | wx.ALL)
self.SetSizer(bSizer2)
self.Layout()
self.Centre(wx.BOTH)
self.timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.onTimer)
# Connect Events
# self.SeekBar.Bind(wx.EVT_SCROLL, self.Seek)
self.PlayBtn.Bind(wx.EVT_BUTTON, self.Play)
self.OpenBtn.Bind(wx.EVT_BUTTON, self.Open)
self.BackwardBtn.Bind(wx.EVT_BUTTON, self.Backward)
self.ForwardBtn.Bind(wx.EVT_BUTTON, self.Forward)
self.StopBtn.Bind(wx.EVT_BUTTON, self.Stop)
self.SoundBar.Bind(wx.EVT_SLIDER, self.SoundChange)
# self.SeekBar.Bind(wx.EVT_SLIDER, self.Seek)
self.Bind(wx.EVT_SIZE, self.sizecontroller)
self.Bind(wx.EVT_UPDATE_UI, self.MainWindowOnUpdateUI)
def __del__(self):
pass
# Code Soon
def sizecontroller(self, event):
self.player.SetSize(self.VideoPane.GetSize())
# print("sizecontroller")
self.VideoPane.SetAutoLayout(1)
# print(self.VideoPane.GetSize())
# self.player = wx.media.MediaCtrl(self.VideoPane, size=self.PlayerSize)
self.Layout()
def MainWindowOnUpdateUI(self, event):
self.player.SetSize(self.VideoPane.GetSize())
# print("MainWindowOnUpdateUI")
self.VideoPane.SetAutoLayout(1)
# self.player = wx.media.MediaCtrl(self.VideoPane, size=self.PlayerSize)
self.Layout()
def Seek(self, event):
self.timer.Stop()
self.player.Pause()
offset = self.SeekBar.GetValue()
self.player.Seek(offset)
self.player.Play()
self.timer.Start(-1)
def Play(self, event):
self.player.Play()
self.SoundBar.SetRange(0, self.player.GetVolume() * 20)
self.player.SetVolume(self.player.GetVolume() / 2)
self.SoundBar.SetValue(self.SoundBar.GetMax() / 2)
# self.SeekBar.SetMax(self.player.Length())
# self.SeekBar.SetPosition()
self.timer.Start()
def Open(self, event):
fc = wx.FileDialog(self, message="Open Media File", style=wx.FD_OPEN,
wildcard="Media Files (.mp4,.avi)|*.mp4;*.avi")
if fc.ShowModal() == wx.ID_OK:
self.path = fc.GetPath()
if not self.player.Load(self.path):
wx.message("Error")
def onTimer(self, evt):
offset = self.player.Tell()
self.SeekBar.SetValue(offset)
def Backward(self, event):
event.Skip()
def Forward(self, event):
event.Skip()
def Stop(self, event):
frame = self.player.Tell()
self.player.Pause()
def SoundChange(self, event):
offset = self.SoundBar.GetValue() / 20
self.player.SetVolume(offset)
app = wx.App(False)
frame = MainWindow(None)
frame.Show()
app.MainLoop()
**strong text**