2012-04-04 7 views
7

के साथ एक पॉपअप संदेश बॉक्स बनाना मैं एक पॉपअप संदेश बॉक्स बनाना चाहता हूं जो उपयोगकर्ता को इनपुट दर्ज करने के लिए संकेत देता है। मेरे पास इस विधि को कक्षा के अंदर है। मैं this guide by java2s पर अपना कोड लगा रहा हूं।एंट्री फ़ील्ड

class MyDialog: 
    def __init__(self, parent): 
     top = self.top = Toplevel(parent) 

     Label(top, text="Value").pack() 

     self.e = Entry(top) 
     self.e.pack(padx=5) 

     b = Button(top, text="OK", command=self.ok) 
     b.pack(pady=5) 

    def ok(self): 
     print "value is", self.e.get() 
     self.top.destroy() 

root = Tk() 
d = MyDialog(root) 

root.wait_window(d.top) 

लेकिन इसमें, top = self.top = Toplevel(parent) मेरे लिए काम नहीं करता है।

मेरे पास जो कुछ भी मैं पूरा करने की कोशिश कर रहा हूं उसका एक झटका है।

GUI mockup

मेरे कार्यक्रम संरचना इस तरह दिखता है:

class MainUI: 
    def__int__(self): 
     ... 
     self.initUI() 

    def initUI(self): 
     ....... 
     Popup = Button(self, text="Enter Value", command=self.showPopup) 

    def showPopup(self): 
     #create the popup with an Entry here 

मैं अजगर में एक संदेश बॉक्स जो उपयोगकर्ता इनपुट स्वीकार करता है कैसे बना सकते हैं?

+0

जब आप कहते हैं "ई भेजें डेटा को मुख्य रूप में वापस कर दिया गया "आपका क्या मतलब है? क्या यह डेटा विजेट में प्रदर्शित होने जा रहा है? –

+0

डेटा वापस भेजकर, मेरा मतलब है कि मान यह है कि टेक्स्ट बॉक्स एक वेरिएबल में संग्रहीत किया जाता है जिसे मैं बाद में प्रोग्राम में हेरफेर करता हूं। – Bharat

उत्तर

11

मैं कोड के आपके दो अलग-अलग ब्लॉक के बारे में थोड़ा उलझन में हूं। बस कोड के पहले ब्लॉक को संबोधित करते हुए, कुछ नहीं होता क्योंकि आप मेनलोप में कभी भी प्रवेश नहीं करते हैं। ऐसा करने के लिए, आपको root.mainloop() पर कॉल करने की आवश्यकता है। ऐसा करने का विशिष्ट तरीका जड़ विजेट के लिए एक बटन जोड़ने के लिए और बटन के लिए एक कॉलबैक फ़ंक्शन बाँध (जो भी शामिल है d=MyDialog() और root.wait_window(d.top))

यहां पर कुछ बुनियादी कोड है जो मुझे आशा है कि आप क्या चाहते हैं करता है करने के लिए ... है

from Tkinter import * 
import sys 

class popupWindow(object): 
    def __init__(self,master): 
     top=self.top=Toplevel(master) 
     self.l=Label(top,text="Hello World") 
     self.l.pack() 
     self.e=Entry(top) 
     self.e.pack() 
     self.b=Button(top,text='Ok',command=self.cleanup) 
     self.b.pack() 
    def cleanup(self): 
     self.value=self.e.get() 
     self.top.destroy() 

class mainWindow(object): 
    def __init__(self,master): 
     self.master=master 
     self.b=Button(master,text="click me!",command=self.popup) 
     self.b.pack() 
     self.b2=Button(master,text="print value",command=lambda: sys.stdout.write(self.entryValue()+'\n')) 
     self.b2.pack() 

    def popup(self): 
     self.w=popupWindow(self.master) 
     self.b["state"] = "disabled" 
     self.master.wait_window(self.w.top) 
     self.b["state"] = "normal" 

    def entryValue(self): 
     return self.w.value 


if __name__ == "__main__": 
    root=Tk() 
    m=mainWindow(root) 
    root.mainloop() 

मुझे पॉपअपविंडो से मूल्य मिलता है और इसे मुख्य प्रोग्राम में उपयोग करें (बी 2 से जुड़े लैम्ब्डा फ़ंक्शन पर एक नज़र डालें)।

मुख्य खिड़की:

Main window

"मुझे क्लिक करें" खिड़की:

click me window

मुख्य खिड़की, जबकि "पर क्लिक करें मुझे" खुला है:

Main window with greyed out "click me"

+0

मैंने आपके कोड की कोशिश की। अब मैं उस प्रविष्टि में दर्ज किए गए मान को उस रूप में कैसे पास करूं जो 'मुख्यविंडो' कक्षा में वापस आ गया हो? हो सकता है कि मेरे पास विधि 'def getVal (self) है: \t \t' popupWindow' class पर स्वयं selfeee 'मैं 'mainWindow' कक्षा से कैसे कॉल करूं? – Bharat

+0

@mgilson, यही वह है जो मैं वास्तव में करना चाहता था। मुझे दूसरी कक्षा से मूल्य प्राप्त करने के तरीके पर थोड़ा उलझन मिला। मैं जावा के संदर्भ में सोच रहा था और मैंने माना कि वर्ग चर निजी थे (पॉपअपविंडो क्लास में परिवर्तनीय 'मान')। अब मैं समझता हूं .. विधि 'प्रविष्टि वैल्यू()' जो मैं करना चाहता था वह करता है। धन्यवाद! – Bharat

+0

क्या 'top = self.top = टोपलवेल (मास्टर)' का उपयोग करने के लिए कोई कारण है 'self.top = टोपलवेल (मास्टर)'? –