【问题标题】:wxPython: Duplicate wxPanel across multiple frameswxPython:跨多个框架复制 wxPanel
【发布时间】:2023-03-21 14:10:01
【问题描述】:

是否可以跨 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())

【问题讨论】:

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

标签: python wxpython libvlc


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多