2016-08-15 12 views
5

बेकार उदाहरण क्यों काम करता है यदि बेकार _ चर बनाया गया है?मुझे अपने QWidget पर एक वेरिएबल पॉइंटिंग रखने की आवश्यकता क्यों है?

_ चर निर्दिष्ट किया गया है और कभी भी उपयोग नहीं किया जाता है। मुझे लगता है कि एक अच्छा कंपाइलर अनुकूलित करेगा और इसे भी नहीं बनाएगा, बल्कि इससे कोई फर्क पड़ता है।

अगर मैं _ = हटा देता हूं और केवल Test() छोड़ देता हूं, तो विंडो बनाई जाती है, लेकिन यह झिलमिलाहट और गायब हो जाती है, और अजगर हमेशा के लिए लटकता है।

यहाँ कोड है:

import sys 
from PyQt4 import QtGui 

class Test(QtGui.QWidget): 
    def __init__(self): 
     super().__init__() 
     self.show() 

app = QtGui.QApplication(sys.argv) 
_ = Test() 
sys.exit(app.exec_()) 
+5

आपका मतलब 'उदाहरण() 'के बजाय' टेस्ट()' है? –

+4

यदि एक पायथन ऑब्जेक्ट का संदर्भ नहीं दिया जाता है, तो यह कचरा इकट्ठा किया जाता है, जो बताएगा कि खिड़की झिलमिलाहट क्यों गायब हो जाती है। –

+1

तो एक चर जो आपका प्रोग्राम बिना काम नहीं करेगा "बेकार" है? – kindall

उत्तर

3

एक बहुत अच्छा सवाल है कि और मैं क्योंकि मेरे PyQt विजेट और प्लग इन के साथ इस तथ्य से अतीत में अजीब समस्याओं का एक बहुत का सामना करना पड़ा गया है, मूल रूप से है कि करने के लिए धन्यवाद होता है python garbage collector

जब आप क्यूटी के मुख्य पाश में प्रवेश करने से पहले _ डमी चर पर अपना उदाहरण असाइन करते हैं, तो एक जीवित संदर्भ होगा जो कचरा कलेक्टर द्वारा एकत्रित होने से बच जाएगा, इसलिए विजेट नष्ट नहीं होगा।

+0

क्या इसका मतलब यह है कि यदि मैं एक गैर-वैश्विक वस्तु की विधि के अंदर विंडो बनाना चाहता हूं, तो जैसे ही ऑब्जेक्ट दायरे से बाहर हो जाता है, तब विंडो नष्ट हो जाएगी? और अगर मैं चाहता था (मुझे किस कारण से पता नहीं है) तो मुझे इसे वैश्विक चर में असाइन करना होगा? – stenci

+0

हां, यह वही है जिसका अर्थ है। –

0

@ बीपीएल सही है, लेकिन मैं यह जोड़ना चाहता था कि आपको इसे असाइन करने की आवश्यकता नहीं है। आप इसे जो भी वैरिएबल चाहते हैं उसे असाइन कर सकते हैं। आपको केवल आपके द्वारा बनाए गए ऑब्जेक्ट पर एक वेरिएबल रेफरेंसिंग की आवश्यकता है, अन्यथा इसे कचरा कलेक्टर द्वारा बनाए जाने के बाद एकत्र किया जाता है।

संबंधित मुद्दे