2012-10-30 11 views
12

में विस्तारणीय और अनुबंध फ्रेम क्या किसी को पता है कि पहले से ही एक विजेट/वर्ग है जो टिंकर/टीटीके में एक टॉगल बटन (चेकबटन) के आधार पर फ्रेम को विस्तार/अनुबंधित करने के लिए है?टिंकर

यह प्रश्न एक अव्यवस्थित गुई को साफ करने के अपने प्रयास से उत्पन्न होता है जिसमें विशिष्ट कार्यों द्वारा वर्गीकृत कई विकल्प हैं। मैं की तर्ज पर कुछ करना चाहते हैं:

enter image description here
उदाहरण गूगल पर पाया

हालांकि बजाय केवल पाठ,, बटन, प्रविष्टियों के लिए अनुमति देते हैं tkinter के विगेट्स के किसी भी।

import tkinter as tk 
import ttk 

class toggledFrame(tk.Frame): 
    def __init__(self): 
     self.show=tk.IntVar() 
     self.show.set(0) 
     self.toggleButton=tk.Checkbutton(self, command=self.toggle, variable=self.show) 
     self.toggleButton.pack() 
     self.subFrame=tk.Frame(self) 

    def toggle(self): 
     if bool(self.show.get()): 
      self.subFrame.pack() 
     else: 
      self.subFrame.forget() 

नोट: इस कोड अपरीक्षित, बस अवधारणा

उत्तर

15

मुझे वास्तव में हैरान है कि मैं कामकाजी कोड प्राप्त करने के करीब कितना करीब था। मैं इस पर काम करने का फैसला किया कुछ और है और मैं वास्तव में क्या चाहते थे प्रदर्शन करने के लिए एक सरल छोटे से वर्ग का विकास (कोड पर टिप्पणियों और सुझावों का स्वागत है):

import tkinter as tk 
from tkinter import ttk 


class ToggledFrame(tk.Frame): 

    def __init__(self, parent, text="", *args, **options): 
     tk.Frame.__init__(self, parent, *args, **options) 

     self.show = tk.IntVar() 
     self.show.set(0) 

     self.title_frame = ttk.Frame(self) 
     self.title_frame.pack(fill="x", expand=1) 

     ttk.Label(self.title_frame, text=text).pack(side="left", fill="x", expand=1) 

     self.toggle_button = ttk.Checkbutton(self.title_frame, width=2, text='+', command=self.toggle, 
              variable=self.show, style='Toolbutton') 
     self.toggle_button.pack(side="left") 

     self.sub_frame = tk.Frame(self, relief="sunken", borderwidth=1) 

    def toggle(self): 
     if bool(self.show.get()): 
      self.sub_frame.pack(fill="x", expand=1) 
      self.toggle_button.configure(text='-') 
     else: 
      self.sub_frame.forget() 
      self.toggle_button.configure(text='+') 


if __name__ == "__main__": 
    root = tk.Tk() 

    t = ToggledFrame(root, text='Rotate', relief="raised", borderwidth=1) 
    t.pack(fill="x", expand=1, pady=2, padx=2, anchor="n") 

    ttk.Label(t.sub_frame, text='Rotation [deg]:').pack(side="left", fill="x", expand=1) 
    ttk.Entry(t.sub_frame).pack(side="left") 

    t2 = ToggledFrame(root, text='Resize', relief="raised", borderwidth=1) 
    t2.pack(fill="x", expand=1, pady=2, padx=2, anchor="n") 

    for i in range(10): 
     ttk.Label(t2.sub_frame, text='Test' + str(i)).pack() 

    t3 = ToggledFrame(root, text='Fooo', relief="raised", borderwidth=1) 
    t3.pack(fill="x", expand=1, pady=2, padx=2, anchor="n") 

    for i in range(10): 
     ttk.Label(t3.sub_frame, text='Bar' + str(i)).pack() 

    root.mainloop() 

इस कोड का उत्पादन:
enter image description here

+1

क्या किसी को पता है कि कुछ जगह है जो अन्य लोगों के उपयोग के लिए इन कस्टम विगेट्स को एकत्र कर रही है? – Onlyjus

+0

यहां एक सूची है: http://tkinter.unpythonic.net/wiki/Widgets – Gonzo

+0

@ गोंजो यह लिंक मर चुका है। क्या आप किसी दर्पण के बारे में जानते हैं? – Plasma

0

पेश मेरी जानकारी के लिए है, तो यह पहले से ही मौजूद नहीं है, यह एक वर्ग है कि tkinter फ्रेम विरासत में नहीं बनाए जा सकते/उपयोगी होगा , टिंकर/टीटीके ऐसे विजेट प्रदान नहीं करता है। आप tkinter.ttk.Treeview के साथ अपने उदाहरण की नकल कर सकते हैं (लेबल सूची का विस्तार/संक्षिप्त करें)।

यह अपने स्वयं के विजेट विकसित करने के लिए पूरी तरह स्वीकार्य 1 है, और आपका कोड सही शुरुआत लगता है।

+0

धन्यवाद । मैंने पहले पेड़दृश्य का उपयोग किया है, लेकिन यह वह नहीं है जिसे मैं ढूंढ रहा हूं। – Onlyjus

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