2010-09-29 10 views
25

कुछ इस तरह, विजेट होगा सामान्य रूप से दिखाई देते हैं:टिंकर में विजेट को देखने के लिए कोई तरीका नहीं है?

Label(self, text = 'hello', visible ='yes') 

कुछ इस तरह, विजेट होगा बिल्कुल भी दिखाई नहीं जबकि:

Label(self, text = 'hello', visible ='no') 
+0

क्या सवाल है, क्या यह उचित व्यवहार नहीं होना चाहिए? – pyfunc

+0

@pyfunc प्रश्न इस विषय में है (चाहे संदेश होना चाहिए लेकिन संदेश निकाय में नहीं है)। – Shule

उत्तर

38

आप pack_forget और grid_forget द्वारा रुचि हो सकती है एक विजेट के तरीके। निम्न उदाहरण में, बटन क्लिक करने पर

from Tkinter import * 

def hide_me(event): 
    event.widget.pack_forget() 

root = Tk() 
btn=Button(root, text="Click") 
btn.bind('<Button-1>', hide_me) 
btn.pack() 
btn2=Button(root, text="Click too") 
btn2.bind('<Button-1>', hide_me) 
btn2.pack() 
root.mainloop() 
+22

'grid_remove' एक और विकल्प है। 'Grid_forget' पर इसका लाभ यह है कि ग्रिड सभी विकल्पों को याद रखेगा, ताकि एक सरल 'ग्रिड()' इसे वापस रखे। कोई 'pack_remove' नहीं है। –

+0

@ ब्रायन ओक्ले: [यहां] (http://effbot.org/tkinterbook/pack.htm#Tkinter.Pack.pack_forget-method) यह कहता है कि यहां तक ​​कि 'पैक()' भी इसे याद करता है। – Gogo

+1

@ शक्तिमान: मुझे नहीं पता कि यह कहां कहता है कि विकल्पों को याद किया जाता है। इसे फिर से चलाया जा सकता है, लेकिन यह एक ही स्थान पर फिर से नहीं किया जा सकता है। –

23

एक विकल्प के रूप में एक और जवाब में बताया गया है, pack_forget या grid_forget उपयोग करने के लिए है गायब हो जाते हैं। एक और विकल्प lift और lower का उपयोग करना है। यह विगेट्स के स्टैकिंग ऑर्डर को बदलता है। शुद्ध प्रभाव यह है कि आप भाई विगेट्स (या भाई बहनों के वंशज) के पीछे विजेट छुपा सकते हैं। जब आप उन्हें lift दिखाई देने के लिए चाहते हैं, और जब आप उन्हें अदृश्य होना चाहते हैं तो lower उन्हें।

लाभ (या हानिकारक ...) यह है कि वे अभी भी अपने गुरु में जगह लेते हैं। यदि आप विजेट को "भूल जाते हैं", तो अन्य विजेट उनके आकार या अभिविन्यास को समायोजित कर सकते हैं, लेकिन यदि आप उन्हें बढ़ाते हैं या कम करते हैं तो वे नहीं करेंगे।

यहाँ एक सरल उदाहरण है:

import Tkinter as tk 

class SampleApp(tk.Tk): 
    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 
     self.frame = tk.Frame(self) 
     self.frame.pack(side="top", fill="both", expand=True) 
     self.label = tk.Label(self, text="Hello, world") 
     button1 = tk.Button(self, text="Click to hide label", 
          command=self.hide_label) 
     button2 = tk.Button(self, text="Click to show label", 
          command=self.show_label) 
     self.label.pack(in_=self.frame) 
     button1.pack(in_=self.frame) 
     button2.pack(in_=self.frame) 

    def show_label(self, event=None): 
     self.label.lift(self.frame) 

    def hide_label(self, event=None): 
     self.label.lower(self.frame) 

if __name__ == "__main__": 
    app = SampleApp() 
    app.mainloop() 
+2

मैं गलत हो सकता था, लेकिन मुझे नहीं लगता कि यह पायथन/टिंकर में काम करता है। 'Raise()' के उपयोग से अनुमान लगाया जा रहा है, जो एक पायथन आरक्षित शब्द है (इसे वास्तव में 'लिफ्ट()' कहा जाता है), मुझे नहीं लगता कि आप पाइथन/टिंकर का उपयोग करते हैं। – AndyL

+5

@ एंडीएल: मैं इन दिनों टिंकर का बहुत उपयोग करता हूं (लगभग 2011) और टीके के साथ लगभग 15 साल का अनुभव है जो अच्छी तरह से अनुवाद करता है। वाकई, मुझे लगता है कि आप इस समाधान के बारे में गलत नहीं हैं बल्कि काम कर रहे हैं लेकिन मुझे आपकी तर्क सुनना अच्छा लगेगा। आप क्यों कहते हैं कि आपको नहीं लगता कि यह काम करता है? क्या आप ऐसे मामले के बारे में जानते हैं जहां यह ऐसा है, या आप अनुमान लगा रहे हैं? वैसे, वैसे, उठाओ बनाम उठाने के बारे में अनुस्मारक के लिए। मैं कभी-कभी भूल जाता हूं कि टिंकर को पायथन के सिंटैक्स को समायोजित करने के लिए टीके के मूल एपीआई से भटकना पड़ता है, और लिफ्ट एक कमांड है जिसे मुझे शायद ही कभी उपयोग करने की आवश्यकता होती है। मैंने अपना जवाब अपडेट कर लिया है। –

+4

मेरी टिप्पणी दोबारा पढ़ने के बाद, मैं यह कहना चाहूंगा कि मैं निश्चित रूप से आक्रामक होने का मतलब नहीं था जैसा मैंने सुना था। मैं क्षमाप्रार्थी हूं। मैंने अपनी प्रारंभिक टिप्पणी की क्योंकि मैंने पहले आपके समाधान की कोशिश की है और इसे मेरे लिए काम नहीं कर सका। जब भी मैंने अपने माता-पिता के पीछे एक विजेट कम करने की कोशिश की तो मुझे एक TclError मिला। यह बहुत ही आकस्मिक रूप से मेरे अपने हिस्से पर एक चूक हो सकता है। क्या आप मुझे ज्ञान देने के लिए कोड प्रदान कर सकते हैं? – AndyL

3

मैं जानता हूँ कि यह कुछ साल देर हो चुकी है, लेकिन इस 10/27/13 के रूप में "Tkinter छिपाने लेबल" के लिए अब 3 गूगल प्रतिक्रिया है .. इसलिए यदि कुछ हफ्ते पहले मेरे जैसे कोई भी साधारण जीयूआई बना रहा है और बस कुछ पाठ को "निचला" या "लिफ्ट" विधियों के माध्यम से किसी अन्य विजेट के लिए स्वैप किए बिना दिखाना चाहता है, तो मैं एक वर्कअराउंड का उपयोग करना चाहता हूं (पायथन 2.7, विंडोज़):

from Tkinter import * 


class Top(Toplevel): 
    def __init__(self, parent, title = "How to Cheat and Hide Text"): 
     Toplevel.__init__(self,parent) 
     parent.geometry("250x250+100+150") 
     if title: 
      self.title(title) 
     parent.withdraw() 
     self.parent = parent 
     self.result = None 
     dialog = Frame(self) 
     self.initial_focus = self.dialog(dialog) 
     dialog.pack() 


    def dialog(self,parent): 

     self.parent = parent 

     self.L1 = Label(parent,text = "Hello, World!",state = DISABLED, disabledforeground = parent.cget('bg')) 
     self.L1.pack() 

     self.B1 = Button(parent, text = "Are You Alive???", command = self.hello) 
     self.B1.pack() 

    def hello(self): 
     self.L1['state']="normal" 


if __name__ == '__main__': 
    root=Tk() 
    ds = Top(root) 
    root.mainloop() 

यहां विचार यह है कि आप डिस्बलेड टेक्स्ट का रंग वें सेट कर सकते हैं ".cget ('bg')" http://effbot.org/tkinterbook/widget.htm "का उपयोग करके माता-पिता के ई पृष्ठभूमि ('बीजी') को" अदृश्य "प्रस्तुत करना। बटन कॉलबैक लेबल को डिफ़ॉल्ट अग्रभूमि रंग में रीसेट करता है और टेक्स्ट एक बार फिर दिखाई देता है।

डाउनसाइड्स यहां हैं कि आपको अभी भी पाठ के लिए स्थान आवंटित करना होगा, भले ही आप इसे पढ़ न सकें, और कम से कम मेरे कंप्यूटर पर, पाठ पूरी तरह से पृष्ठभूमि में मिश्रित नहीं होता है। शायद कुछ tweaking के साथ रंग की बात बेहतर हो सकती है और कॉम्पैक्ट जीयूआई के लिए, रिक्त स्थान आवंटन एक छोटी अस्पष्टता के लिए परेशानी का बहुत अधिक नहीं होना चाहिए।

रंग सामग्री के बारे में जानकारी के बारे में जानकारी के लिए Default window colour Tkinter and hex colour codes देखें।

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