Это примерно wx Python Как сделать так, чтобы одна панель появлялась поверх другой на оси z? - PullRequest
0 голосов
/ 29 апреля 2020

Это примерно 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**
...