2012-06-15 16 views
6

मैं टिंकर में एक टेबल जैसा दिखता हूं, लेकिन यह आवश्यक नहीं है।एक टेबल बनाना जैसे टिंकर

मैं उदाहरण के लिए शीर्षलेख 'नाम 1', 'नाम 2', 'मान' बनाना चाहता हूं और प्रत्येक के नीचे मैं कई रिक्त पंक्तियां चाहता हूं।

ये पंक्तियां मैं बाद में (इसलिए एक लेबल) भरना चाहता हूं जिनके मूल्यों के साथ मैंने गणना की है या नामों के लिए मूल्यों को स्ट्रिंग किया है।

'नाम 2' के लिए मैं वास्तव में पूरे कॉलम के लिए ड्रॉप डाउन मेनू होना चाहता हूं। मैंने पहले से ही एक के लिए कोड बनाया है, लेकिन मुझे यकीन नहीं है कि इसे इस 'टेबल' में कैसे शामिल किया जाए।

क्या यह उदाहरण के लिए लेबल विजेट के चारों ओर एक सीमा बनाने के लिए संभव है, तो यह 'टेबल' जैसा दिखता है?

इस स्थिति में क्या संभव होगा इसके बारे में कोई भी संकेतक बहुत सराहना की जाएगी। अगर आपको किसी भी कोड पर जाने के लिए मेरे किसी भी कोड की आवश्यकता है, तो बस पूछें। धन्यवाद!

+0

पर क्या [TkTable] (साथ http गलत है://tkinter.unpythonic.net/wiki/TkTable)? – Simon

+0

मैं इसे उस पीसी पर डाउनलोड करने में सक्षम नहीं हूं जिसका उपयोग मैं कर रहा हूं ... यह सब अवरुद्ध है! – user2063

+0

यहां तक ​​कि यह http://tkinter.unpy.net/wiki/TkTableWrapper भी? – Simon

उत्तर

31

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

इसे फ्रेम में करें। यदि आपको तालिका को स्क्रॉल करने में सक्षम होना आवश्यक है, तो फ्रेम को कैनवास के अंदर रखें और स्क्रॉलबार जोड़ें। कैनवास का उपयोग करके स्क्रोल करने योग्य फ्रेम बनाने के लिए पूरे वेब पर उदाहरण हैं।

यहां एक वास्तव में त्वरित उदाहरण है जो केवल लेबल का उपयोग करता है, और स्क्रॉल नहीं करता है। मैं पाठक के लिए अभ्यास के रूप में आपको जो चाहिए उसे सटीक कार्यान्वयन छोड़ दूंगा।

import Tkinter as tk 

class ExampleApp(tk.Tk): 
    def __init__(self): 
     tk.Tk.__init__(self) 
     t = SimpleTable(self, 10,2) 
     t.pack(side="top", fill="x") 
     t.set(0,0,"Hello, world") 

class SimpleTable(tk.Frame): 
    def __init__(self, parent, rows=10, columns=2): 
     # use black background so it "peeks through" to 
     # form grid lines 
     tk.Frame.__init__(self, parent, background="black") 
     self._widgets = [] 
     for row in range(rows): 
      current_row = [] 
      for column in range(columns): 
       label = tk.Label(self, text="%s/%s" % (row, column), 
           borderwidth=0, width=10) 
       label.grid(row=row, column=column, sticky="nsew", padx=1, pady=1) 
       current_row.append(label) 
      self._widgets.append(current_row) 

     for column in range(columns): 
      self.grid_columnconfigure(column, weight=1) 


    def set(self, row, column, value): 
     widget = self._widgets[row][column] 
     widget.configure(text=value) 

if __name__ == "__main__": 
    app = ExampleApp() 
    app.mainloop() 
+0

धन्यवाद, यह बहुत अच्छा लग रहा है! – user2063

+0

मेरी एकमात्र समस्या यह है कि मैंने वास्तव में कभी भी 'स्वयं' या '__init__' का उपयोग नहीं किया है और यह समझ में नहीं आता है कि मेनू के लिए मेरे अन्य कार्यों को कैसे शामिल किया जाए। क्या आप मुझे कुछ सलाह दे सकते हैं (चरम शुरुआती लोगों के लिए !) कृप्या? – user2063

+0

उदाहरण के लिए, मैं फ्रेम में नाम असाइन करने के तरीके के बारे में थोड़ा उलझन में हूं ... लेकिन मेरे पास खोलने और मेनू आदि के लिए कार्य हैं। – user2063

2

एक काफी सरल वस्तु कम समाधान मैंने पाया:

from Tkinter import * 

rows = [] 
for i in range(5): 
    cols = [] 
    for j in range(4): 
     e = Entry(relief=RIDGE) 
     e.grid(row=i, column=j, sticky=NSEW) 
     e.insert(END, '%d.%d' % (i, j)) 
     cols.append(e) 
    rows.append(cols) 

def onPress(): 
    for row in rows: 
     for col in row: 
      print col.get(), 
     print 

Button(text='Fetch', command=onPress).grid() 
mainloop() 

या

# simple 2d table 

from Tkinter import * 

for i in range(5): 
    for j in range(4): 
     l = Label(text='%d.%d' % (i, j), relief=RIDGE) 
     l.grid(row=i, column=j, sticky=NSEW) 

mainloop() 

सभी उपलब्ध http://www.java2s.com/Code/Python/GUI-Tk/

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