2014-08-28 6 views
0

Я надеялся, что кто-то может мне помочь. Я хотел бы сделать приложение Tkinter, которое запрашивает число, затем использует это число для рисования правильного количества ярлыков и Entrys.Python Tkinter, Number of Label/Entry на основе IntVar

Вот основной мозговой штурм о том, что я пытаюсь сделать (я знаю, что это неправильно)

from Tkinter import * 

root = Tk() 

numlines = IntVar() 

Label(root, text='Number Of Lines').grid(row=0, column=0) #this is to always stay 
Entry(root, textvariable=numlines).grid(row=0, column=1) #this is to stay always stay 
Button(root, text='Apply Number', command=apply).grid(row=1, column=1) 

def apply(): 
    # this part to draw as a block based in numline(if munlines 5 then draw these two widget 5 times on 5 rows) 
    Label(root, text='Line 1').grid(row=2, column=0)# this part to draw as a block based in numline(if munlines 5 then draw these two widget 5 times) 
    Entry(root, textvariable=numlines).grid(row=2, column=1) 

root.mainloop() 

ответ

1

Реально все приложения Tkinter должны быть помещены внутрь класса. Кроме того, это также общая плохая идея для использования import * из любого пакета, поскольку вы могли бы переопределить проблемы с неизвестными значениями, которые вы импортировали. Таким образом, следующий пример находится внутри класса и должен дать вам представление о том, как это будет выглядеть. Я считаю, что это то, что вы ищете:

import Tkinter as Tk 

class App(Tk.Frame): 
    def __init__(self, master, *args, **kwargs): 
     Tk.Frame.__init__(self, *args, **kwargs) 

     self.existing_lines = 2 
     self.entry_lines = Tk.IntVar() 

     Tk.Label(self, text="Number Of Lines").grid(row=0, column=0) 
     Tk.Entry(self, textvariable=self.entry_lines).grid(row=0, column=1) 
     Tk.Button(self, text="Apply Number", command=self.add_rows).grid(row=1, column=1) 

    def add_rows(self): 
     for row in xrange(self.existing_lines, self.existing_lines+self.entry_lines.get()): 
      Tk.Label(self, text="Line %i" % (row-1)).grid(row=row, column=0) 
      Tk.Entry(self, textvariable=self.entry_lines).grid(row=row, column=1) 
      self.existing_lines+= 1 

if __name__ == "__main__": 
    root = Tk.Tk() 
    App(root).pack() 
    root.mainloop() 
+0

Это фантастика, спасибо большое, это именно то, что мне нужно. Точка, занятая импортом *, я обычно использую Tkinter как Tk, просто для небольшого приложения, я не беспокоюсь, но теперь я начну делать это так. Заботьтесь Снова Большое вам спасибо за ваше время и помощь, это очень ценится. –

+0

Вы назначаете тот же (IntVar) textvariable для каждой 'Entry', поэтому то, что вы вводите в одном из Записей, заканчивается во всех из них. Подумайте о создании списка 'StringVar' для использования в новых записях. – fhdrsdg

+0

@fhdrsdg Это то, что OP предпочло сделать в своих объяснениях. Я предполагаю, что он так хотел, чтобы вы могли ввести количество строк, которые вы хотели в любой строке, а затем нажать enter. – 2014-08-29 12:51:31

 Смежные вопросы

  • Нет связанных вопросов^_^