मेरे पास मेन्यूबटन है, जिसे क्लिक करने पर स्ट्रिंग के विशिष्ट अनुक्रम वाले मेनू को प्रदर्शित करना चाहिए। वास्तव में उस अनुक्रम में कौन से तार हैं, हम रनटाइम तक नहीं जानते हैं, इसलिए पॉप अप करने वाले मेनू को उस पल में उत्पन्न किया जाना चाहिए। यहाँ मैं क्या है:गतिशील रूप से Tkinter में एक मेनू बनाते हैं। (लैम्ब्डा एक्सप्रेशन?)
class para_frame(Frame):
def __init__(self, para=None, *args, **kwargs):
# ...
# menu button for adding tags that already exist in other para's
self.add_tag_mb = Menubutton(self, text='Add tags...')
# this menu needs to re-create itself every time it's clicked
self.add_tag_menu = Menu(self.add_tag_mb,
tearoff=0,
postcommand = self.build_add_tag_menu)
self.add_tag_mb['menu'] = self.add_tag_menu
# ...
def build_add_tag_menu(self):
self.add_tag_menu.delete(0, END) # clear whatever was in the menu before
all_tags = self.get_article().all_tags()
# we don't want the menu to include tags that already in this para
menu_tags = [tag for tag in all_tags if tag not in self.para.tags]
if menu_tags:
for tag in menu_tags:
def new_command():
self.add_tag(tag)
self.add_tag_menu.add_command(label = tag,
command = new_command)
else:
self.add_tag_menu.add_command(label = "<No tags>")
महत्वपूर्ण हिस्सा तहत सामान है "अगर menu_tags:" - मान लीजिए menu_tags सूची है [ 'ढेर', 'अधिक', 'प्रवाह']। तो फिर मैं क्या करना चाहते हैं प्रभावी रूप से यह है:
def add_tag_stack():
self.add_tag('stack')
और इतने पर:
self.add_tag_menu.add_command(label = 'stack', command = add_tag_stack)
self.add_tag_menu.add_command(label = 'over', command = add_tag_over)
self.add_tag_menu.add_command(label = 'flow', command = add_tag_flow)
जहां add_tag_stack() के रूप में परिभाषित किया गया है।
समस्या, चर 'टैग' 'टैग मान' ढेर 'पर ले जाता है और फिर मूल्य' पर 'और इतने पर, और जब तक का मूल्यांकन नहीं हो new_command कहा जाता है, जिस पर चर बात है 'बस' प्रवाह 'है। तो जोड़ा गया टैग हमेशा मेनू पर आखिरी वाला होता है, इससे कोई फर्क नहीं पड़ता कि उपयोगकर्ता क्या क्लिक करता है।
मैं मूल रूप से लैम्ब्डा का उपयोग कर रहा था, और मैंने सोचा था कि उपरोक्त कार्य को स्पष्ट रूप से परिभाषित करना शायद बेहतर काम कर सकता है। किसी भी तरह से समस्या होती है। मैंने चर 'टैग' की प्रतिलिपि (या तो "current_tag = टैग" या प्रतिलिपि मॉड्यूल का उपयोग करके) की कोशिश की है, लेकिन यह इसे हल नहीं करता है। मुझे यकीन नहीं है क्यों।
मेरा दिमाग "eval" जैसी चीज़ों के प्रति घूमना शुरू कर रहा है, लेकिन मुझे आशा है कि कोई व्यक्ति एक चालाक तरीके से सोच सकता है जिसमें ऐसी भयानक चीजें शामिल नहीं हैं।
बहुत धन्यवाद!
(मामले में यह प्रासंगिक है, Tkinter .__ version__ रिटर्न '$ संशोधन: 67,083 $' और Windows XP पर अजगर 2.6.1 का उपयोग कर रहा हूँ।)
ठीक है मैंने सोचा कि शायद टिंकर-विशिष्ट समाधान हो सकता है। कोई कह रहा है "नहीं, नहीं, जिस तरह से आप यह करते हैं वह विशेष कार्य है Tkinter.somethingOrOther()" मदद के लिए धन्यवाद! – MatrixFrog
कोई समस्या नहीं! मैं बस यह इंगित करना चाहता था कि समस्या का एक छोटा सा उदाहरण अलग करने का प्रयास करना एक अच्छा पहला कदम है, यह देखने के लिए कि यह एक भाषा मुद्दा है या एक एपीआई मुद्दा है। –