【问题标题】:WXPython, passing SetLabel() back to wxWXPython,将 SetLabel() 传回 wx
【发布时间】:2023-03-26 05:33:01
【问题描述】:

Python 3.8.6, WXPython, 经验 - 菜鸟

制作一个将在事件后播放列表中的视频的 GUI,例如按下按钮。有一个测试按钮和一个“添加视频”按钮。添加视频时,我拥有它,因此它进入列表的 0。然后更改文本/标签以显示加载的文件。 以下是我目前遇到的代码摘录。

'''

class LeftPanel (wx.Panel):
    def __init__(self, parent, frame_object):
        wx.Panel.__init__(self, parent = parent)

        self.frame_object = frame_object

        idleText = "Idle Animation"
        catIdleText = "None"

        idleLabel = wx.StaticText (self, 0, label = idleText + " - " + ntpath.basename(catIdleText), pos = (5, 5))
        testBtn1 = wx.Button(self, -1, "Test", pos = (5, 20))
        addBtn1 = wx.Button(self, -1, "Add Video", pos = (85, 20))

        self.Bind(wx.EVT_BUTTON, self.buttonPressed1, testBtn1)
        self.Bind(wx.EVT_BUTTON, self.addVid1, addBtn1)


    def addVid1(self, event,):
       with wx.FileDialog(self, "Open XYZ file", wildcard="XYZ files (*.mp4)|*.mp4", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as fileDialog:
           if fileDialog.ShowModal() == wx.ID_CANCEL:
               return

           filePathList[0] = fileDialog.GetPath()
           catIdleText = filePathList[0]
           idleLabel.SetLabel("Idle Animation" + " - " + ntpath.basename(catIdleText)) **<--- where error occurs**

'''

当前,当从 FileDialog 中选择文件时,新更新的文本不会更改。错误输出如下:

Traceback (most recent call last):
     File "frame1.py", line 179, in addVid1
       idleLabel.SetLabel("Idle Animation" + " - " + ntpath.basename(catIdleText))
AttributeError: 'str' object has no attribute 'SetLabel'

我也试过 LeftPanel.catIdleText

我认为将新的更新传递回最初的 catIdleText 是一件非常简单的事情,但这让我很困惑。 非常感谢任何帮助。

【问题讨论】:

  • aalways 将完整的错误消息(从单词“Traceback”开始)作为文本(不是屏幕截图)提出问题(不是评论)。还有其他有用的信息。
  • 您似乎将一些文本直接分配给变量idleLabel = "text",而现在您无法访问Label,但只能访问普通字符串。
  • 如果您不想在不同的方法中使用widgets 和其他变量,那么您应该使用self. - 即self.idleLabel, self.catIdleText
  • 正如@furas 指出的那样,您实际上定义了两个不同的local 变量,一次在def __init__ 中,另一个在def addVid1 中。您可以通过将它们声明为 instance 变量即 self.variable_name 来解决此问题。
  • @furas,抱歉,我已编辑输出错误消息以显示 Traceback 的完整输出。将来现在会这样做。

标签: python attributes wxpython


【解决方案1】:

错误可能意味着您将一些文本直接分配给变量idleLabel = "text",现在您无法访问Label,但可以访问普通string。但我看不出在方法addVid1 的哪个位置可以做到这一点。

但是,如果您想在不同的方法中使用widgets(和其他变量),那么您应该使用self. - 即self.idleLabelself.catIdleText

def __init__(self, parent, frame_object):
    
    # ... code ....

    self.idleLabel = wx.StaticText(self, 0, label=idleText + " - " + ntpath.basename(catIdleText), pos=(5, 5))
   

def addVid1(self, event,):

    # .... code ...

       self.idleLabel.SetLabel("Idle Animation" + " - " + ntpath.basename(catIdleText))

也许这样你就不会将text 分配给self.idleLabel

【讨论】:

    猜你喜欢
    • 2014-04-04
    • 2016-08-26
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 2012-05-27
    • 2023-03-25
    相关资源
    最近更新 更多