如何解决WXPython,从左到右面板传递变量
我正在编写一个程序,在选择要播放的内容后按下左侧面板上的按钮时,可以在右侧面板上播放视频。这充当向用户展示的测试功能。我是使用 Python 和 WXPython 的初学者。在旅途中学习。 我在下面添加了一段代码:
import wx,wx.media
filePathList = ["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,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.GetParent().right.onTestClick(file0)
这有点难看,因为父母创造了孩子 孩子们必须知道父母的结构 同时。
可能最 wxPython-ish 的解决方案是创建您的 自己的事件,将在按钮时创建和触发 被按下。此事件将在 FrameClass 中处理。 这里有一个很好的介绍:
https://wxpython.org/Phoenix/docs/html/events_overview.html#custom-event-summary
,终于搞定了。也感谢您的投入。最有帮助。 我只需要让左侧面板知道右侧面板。在这种情况下...
vsplitter = wx.SplitterWindow(self)
right = RightPanel(vsplitter,self)
left = LeftPanel(vsplitter,right)
vsplitter.SplitVertically(left,right)
vsplitter.SetMinimumPaneSize(200)
self.Show(True)
class LeftPanel (wx.Panel):
def __init__(self,parent,top):
wx.Panel.__init__(self,parent = parent)
self.refTop = top
当我想给它发送一些东西时,我引用了“self.refTop”。比如...
def buttonPressed1(self,event):
file1 = filePathList[0]
self.refTop.onTestClick(file1)
确保 RightPanel 已准备好参数。
class RightPanel (wx.Panel):
def __init__(self,media):
self.mediaFilePath = media
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。