2012-12-19 33 views
12

का उपयोग करते समय tkinter/python स्क्रिप्ट के साथ मान सेट नहीं कर सकता है मैंने एक टिंकर जीयूआई फ्रंट एंड के साथ पायथन में एक प्रोग्राम लिखा है। जब यह स्क्रिप्ट से चलाया जाता है तो कोई समस्या नहीं होती है।cxfreeze

मैंने इसे exx फ़ाइल में cx_freeze का उपयोग करके पैक किया और इसे प्रोग्राम के बहुमत के लिए वहां से चलने से चलाया। हालांकि, इसमें कोई समस्या है: किसी एक कार्य में StringVar ऑब्जेक्ट को मान निर्दिष्ट करने का प्रयास करते समय अपवाद उठाया जाता है और प्रोग्राम को मारता है।

जब एक ही फ़ंक्शन प्रोग्राम में किसी भिन्न बिंदु से उपयोग किया जाता है तो यह सामान्य रूप से कार्य करता है। कोई अंदाजा क्या गलत हो सकता है?

कोड की धारा है कि कारण बनता है मुद्दे के रूप में इस प्रकार है (मैं messagebox जोड़ा तो मैं देख सकता था कि यह क्या पर विफल) है:

if keyDetail.get('default', False): 
    try: 
     self.entries[key].set(keyDetail['default']) 
    except Exception as err: 
     messagebox.showinfo('error', 'key: %s, default: %s, error: %s'%(key, keyDetail['default'], err)) 

self.entries[key] एक tk.StringVar है।

जब ऐसा चलाया जाता है, मैं messagebox में निम्न संदेश मिलता है:

key: orderNo, default: Order Number, error: can't set "PY_VAR16:0"

+0

मुझे यकीन नहीं है कि क्यों टीसीएल एक वेरिएबल के लिए मान सेट करने में विफल रहेगा जो सरणी नहीं है, क्योंकि यह अस्तित्व में नहीं होने पर भी एक चर बनाने का अंत होगा। लेकिन, यदि आपके कार्यक्रम के लिए बहुत देर हो चुकी है, तो मेरी टिप टीसीएल वैरिएबल के उपयोग को छोड़ना है; आपको अपने पायथन कोड में इसकी आवश्यकता नहीं है। इसके अलावा, क्या आपको वैश्विक चर पसंद है? जब आप टिंकर के माध्यम से एक टीसीएल चर बनाते हैं, तो आप हमेशा वैश्विक चर बनाते हैं (बिना स्पष्ट रूप से जानते हुए)। यदि आप शुद्ध टीसीएल कोड में थे तो (स्थानीय) चर बनाना आवश्यक है, लेकिन आपके पास पाइथन में पहले से ही ऐसी चीजें हैं। आप उनके साथ टिंकर का उपयोग करने की व्यवस्था कर सकते हैं। – mmgp

+0

@ एमएमजीपी आपको एक चर बदलते समय फायरिंग घटनाओं जैसी चीजों के लिए टीसीएल चर की आवश्यकता होती है। – korylprince

+0

@Trengot - क्या आप यहां अपने कोड के अन्य हिस्सों को पेस्टबिन पर पेस्ट कर सकते हैं? मुझे लगता है कि उपर्युक्त चीजें समस्या को पकड़ने के लिए पर्याप्त नहीं हैं .. –

उत्तर

0

समस्या का विवरण के लिए ऊपर देखें। त्रुटि नहीं थी:/कोड का यह खंड।

+0

यदि त्रुटि कोड का यह अनुभाग नहीं था, तो बस अपना प्रश्न हटाएं या इसे संपादित करें ताकि यह समझ में आता है। – nbro