2011-09-24 16 views
11

पायथन के साथ व्यक्तिगत उपयोग के लिए एक छोटा सा एप्लीकेशन बनाना और सोचा कि मैं टिंकर का उपयोग करके थोड़ा सा जीयूआई प्रोग्रामिंग के साथ अपना हाथ आजमाऊंगा।जीईआई लेआउट का उपयोग कर ग्रिड ज्यामिति प्रबंधक

GUI layout using Tkinter

आवेदन संदेह:: - स्क्रीनशॉट में ए, बी और सी - है

कैसे मुझे यकीन है कि तीन LableFrames कर सकते हैं यह जीयूआई मैं अब तक बना लिया है एक ही चौड़ाई? (या इसके बजाए, चौड़ाई के तीनों के बराबर चौड़ाई है? उदाहरण के लिए, स्क्रीनशॉट में, ए सबसे व्यापक है और मैं बी और सी को लाइन डी तक भी चौड़ा होना चाहता हूं)।

-

(यह पर्याप्त है अगर मैं सुनिश्चित कर सकते हैं कि चौड़ाई जब मैं यह कोड एक ही हैं, पहली बार दौर वे क्रम पर बदलने की जरूरत नहीं है यह गतिशील रूप से गणना करने के लिए नहीं है।।)

टी ग्रिड ज्यामिति प्रबंधक संदेह:

  1. आप फ्रेम का उपयोग करते हैं, ग्रिड (पंक्ति, कॉलम) विशिष्ट फ्रेम के केवल आकार करने के लिए है या यह (फार्म के आकार के आधार पर की जाती है जड़ खिड़की)?

  2. ग्रिड में निर्धारित कॉलम का आकार कैसा है?

  3. मुझे पूरी तरह से समझ में नहीं आया है कि एक ग्रिड के भीतर 'वजन' क्या करता है। इसका इस्तेमाल कब किया जाना चाहिए?

अजगर जीयूआई कोड:

import Tkinter 

if __name__ == '__main__': 
    form = Tkinter.Tk() 

    getFld = Tkinter.IntVar() 

    form.wm_title('File Parser') 

    stepOne = Tkinter.LabelFrame(form, text=" 1. Enter File Details: ") 
    stepOne.grid(row=0, columnspan=7, sticky='W', \ 
       padx=5, pady=5, ipadx=5, ipady=5) 

    helpLf = Tkinter.LabelFrame(form, text=" Quick Help ") 
    helpLf.grid(row=0, column=9, columnspan=2, rowspan=8, \ 
       sticky='NS', padx=5, pady=5) 
    helpLbl = Tkinter.Label(helpLf, text="Help will come - ask for it.") 
    helpLbl.grid(row=0) 

    stepTwo = Tkinter.LabelFrame(form, text=" 2. Enter Table Details: ") 
    stepTwo.grid(row=2, columnspan=7, sticky='W', \ 
       padx=5, pady=5, ipadx=5, ipady=5) 

    stepThree = Tkinter.LabelFrame(form, text=" 3. Configure: ") 
    stepThree.grid(row=3, columnspan=7, sticky='W', \ 
        padx=5, pady=5, ipadx=5, ipady=5) 

    inFileLbl = Tkinter.Label(stepOne, text="Select the File:") 
    inFileLbl.grid(row=0, column=0, sticky='E', padx=5, pady=2) 

    inFileTxt = Tkinter.Entry(stepOne) 
    inFileTxt.grid(row=0, column=1, columnspan=7, sticky="WE", pady=3) 

    inFileBtn = Tkinter.Button(stepOne, text="Browse ...") 
    inFileBtn.grid(row=0, column=8, sticky='W', padx=5, pady=2) 

    outFileLbl = Tkinter.Label(stepOne, text="Save File to:") 
    outFileLbl.grid(row=1, column=0, sticky='E', padx=5, pady=2) 

    outFileTxt = Tkinter.Entry(stepOne) 
    outFileTxt.grid(row=1, column=1, columnspan=7, sticky="WE", pady=2) 

    outFileBtn = Tkinter.Button(stepOne, text="Browse ...") 
    outFileBtn.grid(row=1, column=8, sticky='W', padx=5, pady=2) 

    inEncLbl = Tkinter.Label(stepOne, text="Input File Encoding:") 
    inEncLbl.grid(row=2, column=0, sticky='E', padx=5, pady=2) 

    inEncTxt = Tkinter.Entry(stepOne) 
    inEncTxt.grid(row=2, column=1, sticky='E', pady=2) 

    outEncLbl = Tkinter.Label(stepOne, text="Output File Encoding:") 
    outEncLbl.grid(row=2, column=5, padx=5, pady=2) 

    outEncTxt = Tkinter.Entry(stepOne) 
    outEncTxt.grid(row=2, column=7, pady=2) 

    outTblLbl = Tkinter.Label(stepTwo, \ 
      text="Enter the name of the table to be used in the statements:") 
    outTblLbl.grid(row=3, column=0, sticky='W', padx=5, pady=2) 

    outTblTxt = Tkinter.Entry(stepTwo) 
    outTblTxt.grid(row=3, column=1, columnspan=3, pady=2, sticky='WE') 

    fldLbl = Tkinter.Label(stepTwo, \ 
          text="Enter the field (column) names of the table:") 
    fldLbl.grid(row=4, column=0, padx=5, pady=2, sticky='W') 

    getFldChk = Tkinter.Checkbutton(stepTwo, \ 
          text="Get fields automatically from input file",\ 
          onvalue=1, offvalue=0) 
    getFldChk.grid(row=4, column=1, columnspan=3, pady=2, sticky='WE') 

    fldRowTxt = Tkinter.Entry(stepTwo) 
    fldRowTxt.grid(row=5, columnspan=5, padx=5, pady=2, sticky='WE') 

    transChk = Tkinter.Checkbutton(stepThree, \ 
       text="Enable Transaction", onvalue=1, offvalue=0) 
    transChk.grid(row=6, sticky='W', padx=5, pady=2) 

    transRwLbl = Tkinter.Label(stepThree, \ 
       text=" => Specify number of rows per transaction:") 
    transRwLbl.grid(row=6, column=2, columnspan=2, \ 
        sticky='W', padx=5, pady=2) 

    transRwTxt = Tkinter.Entry(stepThree) 
    transRwTxt.grid(row=6, column=4, sticky='WE') 

    form.mainloop() 

(नोट: अजगर 2.4.3 के लिए)

उत्तर

10

आप एक ही columnspan का उपयोग करें और चिपचिपा का उपयोग करते हैं = 'हम' सभी तीन LabelFrames पर तो वे एक ही चौड़ाई होना चाहिए। उदाहरण के लिए, आप का उपयोग करने के

stepTwo = Tkinter.LabelFrame(form, text=" 2. Enter Table Details: ") 
stepTwo.grid(row=2, columnspan=7, sticky='WE', \ 
      padx=5, pady=5, ipadx=5, ipady=5) 

प्रश्न

1) आप फ्रेम का उपयोग करते हैं, ग्रिड (पंक्ति, कॉलम) फ्रेम के केवल आकार के लिए विशिष्ट है या यह है चाहता हूँ (रूट विंडो) के आकार के आधार पर गणना की गई?

यहाँ एक अन्योन्याश्रय नहीं है। फॉर्म का पसंदीदा आकार बच्चों और लेआउट के पसंदीदा आकारों पर निर्भर करेगा, लेकिन बच्चों के वास्तविक आकार फॉर्म और लेआउट के वास्तविक आकार पर निर्भर होंगे। पसंदीदा आकार निर्धारित करने के लिए बच्चों से लेआउट को रूट में किया जाता है, और फिर जब यह रूट पर जाता है, तो पसंदीदा आकार वास्तविक आकार के रूप में उपयोग किया जाता है (जब तक ओवरराइड नहीं किया जाता)। लेआउट फिर वास्तविक आकार असाइन करने के लिए वापस चला जाता है।

2) ग्रिड में निर्धारित कॉलम का आकार कैसा है?

कॉलम का पसंदीदा आकार उस पंक्ति में सभी वस्तुओं की न्यूनतम पसंदीदा चौड़ाई के आधार पर निर्धारित किया जाता है।कॉलम का वास्तविक आकार पसंदीदा आकार और पैरेंट विजेट की अतिरिक्त जगह के कुछ प्रतिशत द्वारा निर्धारित किया जाता है।

3) मैंने पूरी तरह से समझ नहीं लिया है कि एक ग्रिड के भीतर 'वजन' क्या करता है। जब का उपयोग किया जाना चाहिए?

वजन ऊपर वर्णित अतिरिक्त स्थान का प्रतिशत निर्धारित करता है। कॉलम को दी गई अतिरिक्त जगह की मात्रा कॉलम_वेट/कुल_वेट है।

+0

बहुत अच्छा जवाब, वॉन। –