2012-10-27 17 views
7

में उपयोग किए गए फ़ंक्शन से पायथन टिंकर रिटर्न वैल्यू मैं वापसी मूल्य ए से सी कैसे प्राप्त करूं? मैं रास्ते से कक्षा का उपयोग नहीं कर रहा हूँ।कमांड

def button: 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    return A 

B = StringVar() 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1) 

उत्तर

3

आप button समारोह के भीतर से C.set कह सकते हैं:

def button: 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    C.set(A) 
    # return A # return values are useless here 
7

लघु जवाब: आप नहीं कर सकते। कॉलबैक कुछ भी वापस नहीं कर सकता है क्योंकि इसे वापस करने के लिए कहीं भी नहीं है - ईवेंट लूप को छोड़कर, जो रिटर्न वैल्यू के साथ कुछ भी नहीं करता है।

किसी ईवेंट आधारित एप्लिकेशन में, आप आमतौर पर क्या करेंगे, कक्षा पर एक विशेषता सेट की जाती है। या, यदि आप एक नौसिखिया हैं, तो आप एक वैश्विक चर सेट कर सकते हैं। वैश्विक चर का उपयोग करना वास्तविक कोड के लिए एक अच्छा विचार नहीं है जिसे समय के साथ बनाए रखा जाना चाहिए लेकिन यह प्रयोग के लिए ठीक है।

def button(): 
    global C 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    C = A 
2

यह आसान बस की घोषणा दिए जाने पर एक वैश्विक:

तो, उदाहरण के लिए, के बाद से C अपने उदाहरण में एक वैश्विक चर प्रतीत होता है, आप की तरह कुछ करना होगा।

def button: 
global A 
mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
A = B.get() 
return A 

B = StringVar()` 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1) 
# and then A is not empty 
B= A 
0

पुराना सवाल, लेकिन अधिकांश उत्तरों ने एक वैश्विक चर का सुझाव दिया। मुझे अपनी परियोजनाओं में बहुत से वैश्विक चर का उपयोग करना पसंद नहीं है, इसलिए मेरा समाधान यहां है।

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

def button(): 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    return A 

B = StringVar() 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = lambda: C=button()).grid(row = 1, column = 1) 

आप self अपनी परियोजना संगठन पर निर्भर करता है button के लिए एक तर्क के रूप में करना पड़ सकता है, लेकिन अवधारणा ही है। बटन कमांड पर तर्क पारित करने के लिए लैम्ब्डा कमांड भी उपयोगी होते हैं।