【发布时间】:2021-01-18 15:53:46
【问题描述】:
我正在编写一个程序来在选择要播放的内容后按下左侧面板上的按钮时在右侧面板上播放视频。这充当向用户展示的测试功能。我是使用 Python 和 WXPython 的初学者。随时随地学习。 我在下面添加了一个我卡在下面的代码的 sn-p:
import wx, wx.media
filePathList = ["None", "None", "None", "None", "None"]
class FrameClass (wx.Frame):
def __init__(self, parent):
super(FrameClass, self).__init__(None, title = "Super Bot", size = (750, 400))
vsplitter = wx.SplitterWindow(self)
left = LeftPanel(vsplitter, self)
self.right = RightPanel(vsplitter, self)
vsplitter.SplitVertically(left, self.right)
vsplitter.SetMinimumPaneSize(200)
self.Show(True)
class LeftPanel (wx.Panel):
def __init__(self, parent, *args, **kwargs):
wx.Panel.__init__(self, parent = parent)
testBtn1 = wx.Button(self, -1, "Test", pos = (5, 20))
self.Bind(wx.EVT_BUTTON, self.buttonPressed1, testBtn1)
def buttonPressed1(self, event):
file0 = filePathList[0]
self.right.onTestClick(file0)
class RightPanel (wx.Panel):
def __init__(self, parent, media):
wx.Panel.__init__(self, parent = parent)
self.mediaFilePath = media
def onTestClick(self):
self.testMedia = wx.media.MediaCtrl(self, size = (500, 300), style=wx.SIMPLE_BORDER, szBackend = wx.media.MEDIABACKEND_WMP10)
self.testMedia.Bind(wx.media.EVT_MEDIA_LOADED, self.play)
self.testMedia.Load(self.mediaFilePath)
def play(self, event):
self.testMedia.Play()
目前一切正常。除了将视频传递到 rightPanel 视频 onTestClick 之外还有什么。在哪里显示当前错误
Traceback (most recent call last):
File "frame1.py", line 151, in buttonPressed1
self.right.onTestClick(file0)
AttributeError: 'LeftPanel' object has no attribute 'right'
我可以想象,因为 right 是在 FrameClass 中定义的,所以当尝试使用它时,它在 LeftPanel 内部是不知道的。 任何帮助将不胜感激。
【问题讨论】:
-
您可以避免将面板创建为单独的类并同时消除拆分器。只需将面板声明为
self.left_panel和self.right_panel,然后使用sizer 来组织它们。面向对象编程并不总是答案,例如,当你只有一把锤子时,一切看起来都像钉子。
标签: python attributes wxpython definition