wxPython:跨多个帧复制wxPanel

wxPython:跨多个帧复制wxPanel,python,wxpython,libvlc,Python,Wxpython,Libvlc,可以在wxPython中跨一对帧克隆wxPanel吗 我尝试过使用相同的wxID,这导致了重要的结果。 我尝试过使用同一个控件实例,结果只绘制了一个。 我最终尝试显示LibVLC的输出,该输出通过它的hwnd同时在两帧上呈现给wxPanel。一帧位于控制窗口内,用于提供视频预览,而另一帧则在第二台显示器上全屏显示 下面是我用来在预览窗口中显示视频输出的代码的简化版本: class MainFrame(wx.Frame): def __init__(self, *args, **kwds)

可以在wxPython中跨一对帧克隆wxPanel吗

我尝试过使用相同的wxID,这导致了重要的结果。 我尝试过使用同一个控件实例,结果只绘制了一个。 我最终尝试显示LibVLC的输出,该输出通过它的hwnd同时在两帧上呈现给wxPanel。一帧位于控制窗口内,用于提供视频预览,而另一帧则在第二台显示器上全屏显示

下面是我用来在预览窗口中显示视频输出的代码的简化版本:

class MainFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.video_panel = wx.Panel(self, wx.ID_ANY)
        self.video_panel.SetBackgroundColour(wx.Colour(0, 0, 0))
        sizer_video = wx.BoxSizer(wx.VERTICAL)
        sizer_video.Add(self.video_panel, 1, wx.ALL | wx.EXPAND, 2)
        self.SetSizer(sizer_video)
        self.Layout()
        self.Instance = Libraries.vlc.Instance()
        self.player = self.Instance.media_player_new()

    def mediaLoad(self, path):
        self.Media = self.Instance.media_new(unicode(path))
        self.player.set_media(self.Media)
        if sys.platform.startswith('win'):
            self.player.set_hwnd(self.video_panel.GetHandle())
        elif sys.platform.startswith('linux'):
            self.player.set_xwindow(self.video_panel.GetHandle())
        else:
            self.player.set_nsobject(self.video_panel.GetHandle())

在wxPython你不能这么做。每个小部件都有一个父部件。我认为最好的方法是创建wx.Panel的子类,并让两个框架都实例化这个类。然后可以使用pubsub在两个帧之间进行通信。我不认为您能够让这两个实例完全同步,但您应该能够让它们非常接近。

简而言之,不,您将无法按照您设想的方式进行同步。每个面板只能有一个父面板,并且不能像您所追求的那样在多个窗口中重用面板。您需要为需要的每个框架、窗口或对话框创建单独的面板。