पायथन 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 का बैक अप लेना काफी आसान बात होगी, हालांकि यह मुझे स्टंप कर रहा है। कोई भी मदद बहुत ही सराहनीय होगी।
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
पर भरोसा न करें
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।
idleLabel = "text"
पर असाइन करते हैं और अब आपके पासLabel
तक सामान्य स्ट्रिंग तक पहुंच नहीं है।widgets
और अन्य चर का उपयोग नहीं करना चाहते हैं तो आपकोself.
- यानी,self.idleLabel
,self.catIdleText
का उपयोग करना चाहिए।local
चर परिभाषित कर रहे हैं, एक बारdef __init__
में और दूसराdef addVid1
में। आप उन्हें एक बारinstance
वैरिएबल यानीself.variable_name
घोषित करके इस समस्या से निजात पा सकते हैं।