पायथन 3.8.6, WXPython, अनुभव - नोबस्टर

एक गुई बनाना जो एक बटन प्रेस की तरह एक घटना के बाद एक सूची से एक वीडियो चलाएगा। एक परीक्षण बटन और एक "वीडियो जोड़ें" बटन है। जब कोई वीडियो जोड़ा जाता है तो मेरे पास वह होता है इसलिए यह सूची के 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'

मैंने भी लेफ्टपैनेल की कोशिश की है।catIdleText

मैंने सोचा कि नए अपडेट को प्रारंभिक catIdleText का बैक अप लेना काफी आसान बात होगी, हालांकि यह मुझे स्टंप कर रहा है। कोई भी मदद बहुत ही सराहनीय होगी।

-2
FlatBattery 5 जिंदा 2021, 05:55
हमेशा पूर्ण त्रुटि संदेश ("ट्रेसबैक" शब्द से शुरू) प्रश्न में (टिप्पणी नहीं) टेक्स्ट (स्क्रीनशॉट नहीं) के रूप में रखें। अन्य उपयोगी जानकारी हैं।
 – 
furas
5 जिंदा 2021, 07:42
ऐसा लगता है कि आप कुछ टेक्स्ट सीधे वेरिएबल idleLabel = "text" पर असाइन करते हैं और अब आपके पास Label तक सामान्य स्ट्रिंग तक पहुंच नहीं है।
 – 
furas
5 जिंदा 2021, 07:43
1
यदि आप अलग-अलग तरीकों से widgets और अन्य चर का उपयोग नहीं करना चाहते हैं तो आपको self. - यानी, self.idleLabel, self.catIdleText का उपयोग करना चाहिए।
 – 
furas
5 जिंदा 2021, 07:44
जैसा कि @furas बताते हैं, आप वास्तव में 2 अलग local चर परिभाषित कर रहे हैं, एक बार def __init__ में और दूसरा def addVid1 में। आप उन्हें एक बार instance वैरिएबल यानी self.variable_name घोषित करके इस समस्या से निजात पा सकते हैं।
 – 
Rolf of Saxony
5 जिंदा 2021, 12:02
@furas, क्षमा करें, मैंने ट्रेसबैक से पूर्ण आउटपुट दिखाने के लिए आउटपुट त्रुटि संदेश संपादित किया है। भविष्य में अभी ऐसा करेंगे।
 – 
FlatBattery
5 जिंदा 2021, 16:02

1 उत्तर

सबसे बढ़िया उत्तर

त्रुटि का अर्थ यह हो सकता है कि आपने कुछ टेक्स्ट सीधे वेरिएबल idleLabel = "text" को असाइन किया है और अब आपके पास Label पर सामान्य string तक पहुंच नहीं है। लेकिन मैं नहीं देखता कि विधि addVid1 में आप यह कहां कर सकते हैं।

लेकिन अगर आप अलग-अलग तरीकों से widgets (और अन्य चर) का उपयोग करना चाहते हैं तो आपको self. - यानी, self.idleLabel, self.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 पर भरोसा न करें

1
furas 5 जिंदा 2021, 16:24