2013-05-04 7 views
7

मैं इस समय टिंकर सीखना शुरू कर रहा हूं, और जब मैसेजबॉक्स आयात करता हूं तो मुझे पता चला कि मुझे वास्तव में आयात विवरणों को समझना नहीं चाहिए।टीके संदेशबॉक्स आयात भ्रम

import tkinter as tk 

def text_box(): 
    if tk.messagebox.askokcancel("Quit", "Never Mind"): 
     root.destroy() 

root = tk.Tk() 
button = tk.Button(root, text="Press the button", command=text_box) 
button.pack() 
root.mainloop() 

ठीक संकलित, लेकिन बटन दबाने त्रुटि 'module' object has no attribute 'messagebox' देता है, जबकि कोड:

import tkinter as tk 
from tkinter import messagebox 

... 
    if messagebox.askokcancel("Quit", "Never Mind"): 
... 

... बिना किसी बाधा के काम करता है

बात यह है कि मुझे confuses है।

यदि मैं from tkinter import * के साथ आयात करता हूं तो मुझे एक समान त्रुटि मिलती है।

की सूची में tkinter messagebox के लिए सहायता दिखाता है, लेकिन मैं इसे सामान्य तरीके से लोड नहीं कर सकता।

तो मेरा सवाल है, क्यों ... और यह आयात करने के बारे में क्या है जिसे मैं समझ नहीं पा रहा हूं?

बस सोचा था कि मैं उल्लेख-चाहिए कोड केवल अजगर 3 में काम करता है, और अजगर 2.x में messageboxtkMessageBox कहा जाता है और tkinter में परिभाषित नहीं है।

+0

+1 एक अच्छा पहेली (जो tkinter3 छुआ नहीं गया है के लिए)। – msw

उत्तर

15

tkinter.messagebox एक मॉड्यूल है, कक्षा नहीं।

क्योंकि यह tkinter.__init__.py में आयात नहीं किया गया है, तो आप इसका उपयोग करने से पहले इसे स्पष्ट रूप से आयात करना होगा।

import tkinter 
tkinter.messagebox # would raise an ImportError 
from tkinter import messagebox 
tkinter.messagebox # now it's available eiter as `messagebox` or `tkinter.messagebox` 
+0

ओ.के, यह समझ में आता है। बस एक छोटा सा सवाल, हो सकता है कि 'संदेशबॉक्स' को 'tkinter .__ init __। Py' मैन्युअल रूप से' में डालने में कोई समस्या हो सकती है? मुझे लगता है कि डेवलपर्स ने ऐसा कुछ कारण नहीं किया था। – Apple

+1

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

+2

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

0

इस

import sys 

from tkinter import * 

कोशिश ... और अपने कोड

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