2011-12-16 15 views
6

में लूप में किसी सूची से एकाधिक चेकबॉक्स कैसे बना सकता हूं मेरे पास चर की लंबाई है और सूची में प्रत्येक प्रविष्टि के लिए एक चेकबॉक्स (पायथन टीकिंटर के साथ) बनाना है (प्रत्येक प्रविष्टि मशीन से मेल खाती है जिसे चेकबॉक्स के साथ चालू या बंद किया जाना चाहिए -> शब्दकोश में मान बदलें)।मैं पाइथन tkinter

print enable 
{'ID1050': 0, 'ID1106': 0, 'ID1104': 0, 'ID1102': 0} 

(उदाहरण के लिए, किसी भी लम्बाई हो सकता है)

अब प्रासंगिक कोड:

for machine in enable: 
    l = Checkbutton(self.root, text=machine, variable=enable[machine]) 
    l.pack() 
self.root.mainloop() 

इस कोड को 4 चेक बॉक्स का उत्पादन लेकिन वे सभी या तो टिक कर रहे हैं या एक साथ unticked और में मानों enable dict dict नहीं बदलते हैं। कैसे हल करें? (मुझे लगता है कि l काम नहीं करता है, लेकिन यह एक चर बनाने के लिए कैसे?)

उत्तर

12

प्रत्येक चेकबटन को पारित "परिवर्तनीय" टिंकर वैरिएबल का एक उदाहरण होना चाहिए - जैसा कि है, यह केवल मूल्य है "0 "यह पारित हो गया है, और यह मिस्त्रीकरण का कारण बनता है।

आप वह पर Tkinter.Variable उदाहरण बना सकते हैं पाश के लिए एक ही आप checkbuttons बना सकते हैं - बस के लिए अपने कोड बदलने के लिए:

for machine in enable: 
    enable[machine] = Variable() 
    l = Checkbutton(self.root, text=machine, variable=enable[machine]) 
    l.pack() 

self.root.mainloop() 

फिर आप में के रूप में अपनी get पद्धति का उपयोग करके प्रत्येक बॉक्स के राज्य जाँच कर सकते हैं enable["ID1050"].get()

+0

मदद करता है धन्यवाद! चेकबॉक्स अब काम करता है, सिर्फ एक प्रश्न: मैं tkinter वर्ग के बाहर चर को कैसे पढ़ सकता हूं (मैंने इसे इस तरह स्थापित किया है: http://stackoverflow.com/a/1835036/1102225)। मैंने सब कुछ करने की कोशिश की। जब मैं 'प्रिंट सक्षम [मशीन] .get() विशेषताएँ त्रुटि:' int 'ऑब्जेक्ट में कोई विशेषता नहीं है' get'' तो मैंने कोशिश की: 'प्रिंट ऐप। सक्षम [मशीन] .get() विशेषताएँ त्रुटि: 'MyTkApp enable'' और जब मैं समझ के बिना क्या (एप्लिकेशन MyTkApp बुलाया tkinter वर्ग की वस्तु है) 'वस्तु कोई गुण नहीं है': अपने आप 'प्रिंट सक्षम [मशीन] PY_VAR0' – Sebastian

+0

ओह मुझे मिल गया! मैंने मूल्य वापस करने के लिए टिंकर वर्ग में एक फ़ंक्शन शामिल किया: 'def read (self, machine): \t वापसी सक्षम करें [मशीन] .get() 'फिर कक्षा के बाहर आप उदाहरण के लिए बस कॉल कर सकते हैं: ' प्रिंट app.read (1050) ' – Sebastian

1

बस सोचा था कि मैं एक शब्दकोश के बजाय एक सूची के लिए मेरे उदाहरण का हिस्सा चाहते हैं:

from Tkinter import * 

root = Tk()  

users = [['Anne', 'password1', ['friend1', 'friend2', 'friend3']], ['Bea', 'password2', ['friend1', 'friend2', 'friend3']], ['Chris', 'password1', ['friend1', 'friend2', 'friend3']]] 

for x in range(len(users)): 
    l = Checkbutton(root, text=users[x][0], variable=users[x]) 
    print "l = Checkbutton(root, text=" + str(users[x][0]) + ", variable=" + str(users[x]) 
    l.pack(anchor = 'w') 

root.mainloop() 

उम्मीद है कि यह