2014-06-06 6 views
0

안녕하세요 저는 Tkinter에서 프로그래밍을 처음 사용합니다. 나는이 프로그램을 썼다. IngredientAdder() 클래스를 만들고이 클래스 내에서 def steps_box이라는 변수를 사용했습니다.이 변수는 텍스트 위젯을 호출하는 self.entry2입니다. 프로그램을 실행하면 텍스트 상자가 제대로 작동합니다. 그러나, 내 방법은 def save_recipieinit.gui 메서드 (words.get 텍스트 상자에 self.entry2라는 텍스트 상자에 입력 된 해당하는) 단추를 누를 때 words.get('1.0', 'end') 터미널 창에 인쇄하려면 썼습니다. 그러나 프로그램을 실행하고 입력란에 텍스트를 입력하고 저장 버튼을 누르면 터미널 창에 아무 것도 인쇄되지 않습니다. 텍스트 상자에 입력 한 텍스트가 터미널 창에 인쇄되도록 코드를 수정하려면 어떻게해야합니까? 도움?Tkinter : Text Widget에 입력 한 텍스트를 새 창에 저장하려면 어떻게해야합니까?

코드에 주석을 추가 할 수 있다면 매우 유용 할 것입니다 !! 감사.

import Tkinter 

class Cookbook(Tkinter.Tk): 
    def __init__(self): 
     Tkinter.Tk.__init__(self) 
     self.title("Cookbook") 
     self.geometry("500x500+0+22") 

     self.button = [] 
     for r in range(1): 
      for c in range(1): 
       b = Button(self).grid(row=r,column=c) 
       self.button.append(b) 

class Button(Tkinter.Button): 
    def __init__(self,parent): 
     b = Tkinter.Button.__init__(self, parent, text="Add A New Recipie", height=8, width=15, command=self.make_window) 

    def make_window(self): 
     popwindow = IngredientAdder() 
     popwindow.title_box() 
     popwindow.ingredients_box() 
     popwindow.steps_box() 
     popwindow.init_gui() 

class IngredientAdder(Tkinter.Tk): 
    def __init__(self): 
     Tkinter.Tk.__init__(self) 
     self.title("Recipie") 
     self.geometry("555x500") 

    def title_box(self): 
     #Frame for the Title Label and the Title Entry Box 
     self.frame1 = Tkinter.Frame(self, height=50, width=550, relief=Tkinter.SUNKEN) 
     self.frame1.pack(anchor=Tkinter.NW,side=Tkinter.TOP) 
     self.frame1.pack_propagate(False) 

     #putting in a Title LABEL and ENTRY BOX 
     Tkinter.Label(self.frame1,text="Title:").pack(anchor=Tkinter.NW,side=Tkinter.LEFT) 
     self.entry1 = Tkinter.Entry(self.frame1,width=550) 
     self.entry1.pack(anchor=Tkinter.NW,side=Tkinter.TOP) 

    def ingredients_box(self): 
     #Frame for the Ingredients Label and the Ingredients Entry Boxes & Steps label and Steps Textbox 
     self.frame2 = Tkinter.Frame(self, height=412,width=550, relief=Tkinter.SUNKEN) 
     self.frame2.pack(anchor=Tkinter.NW,side=Tkinter.TOP) 
     self.frame2.pack_propagate(False) 

     # put an Ingredients label at the top of the window and anchor it there 
     ingredients_label = Tkinter.Label(self.frame2,text="Ingredients:").pack(anchor=Tkinter.NW,side=Tkinter.LEFT) #.grid(row=100, column=0) 

    def steps_box(self): 
     self.entry2 = Tkinter.Text(self.frame2,width=40,height=33,font="helvetica 12",padx=5,pady=5).pack(anchor=Tkinter.NW,side=Tkinter.RIGHT) 

     #putting in an entry box and Steps label for the steps of the recepie 
     steps_label = Tkinter.Label(self.frame2,text="Steps:").pack(anchor=Tkinter.NW,side=Tkinter.RIGHT) #.grid(row=100,column=1) 

    def title_save(self): 
     self.title_entries.append(self.entry1) 

    def text_box(self): 
     self.text_entries.append(self.entry2) 

    # function to add new ingredients 
    def add_ingredient_entry(self): 
     entry = Tkinter.Entry(self.frame2) 
     entry.pack(anchor=Tkinter.NW,side=Tkinter.TOP) 
     self.ingredient_entries.append(entry) 

    # get contents of all entry boxes 
    def save_recipie(self): 
     print("Title:") 
     for words in self.title_entries: 
      print words.get() 
     print("Ingredients:") 
     for ingredient in self.ingredient_entries: 
      print ingredient.get() 
     print("Steps:") 
     for text in self.text_entries: 
      print text.get('1.0', 'end') 
     print "[Recipie saved]" 

    # build initial widgets 
    def init_gui(self): 
     # title saved in this array, hopefully... 
     self.title_entries = []  

     # this is a list of ingredients entry boxes 
     self.ingredient_entries = [] 

     #this saves the list in this array, hopefully.. 
     self.text_entries = [] 

     #Making a frame at the bottom to put both buttons in line 
     self.test4 = Tkinter.Frame(self,height=10, relief=Tkinter.SUNKEN) 
     self.test4.pack(side=Tkinter.BOTTOM) 

     # Put these two buttons at the bottom of the window and anchor them there 
     Tkinter.Button(self.test4,text="Save recipe",command=self.save_recipie, width=15).pack(anchor=Tkinter.SE,side=Tkinter.RIGHT) 
     Tkinter.Button(self.test4,text="Add ingredient",command=self.add_ingredient_entry, width=15).pack(anchor=Tkinter.NW,side=Tkinter.LEFT) 

     # new ingredients will be added between the label and the buttons 
     self.add_ingredient_entry() 

top = Cookbook() 
top.mainloop() 

답변

0

코드 self.entry2

def steps_box(self): 
    self.entry2 = Tkinter.Text(self.frame2,width=40,height=33,font="helvetica 12",padx=5,pady=5).pack(anchor=Tkinter.NW,side=Tkinter.RIGHT) 

레지스터 없음. 당신은 당신의 방법 text_box를 호출하지 않기 때문에 당신이 self.text_entriesself.entry2를 등록하지 않았습니다, 그러나

def steps_box(self): 
    self.entry2 = Tkinter.Text(self.frame2, width=40, height=33, font="helvetica 12", padx=5, pady=5) 
    self.entry2.pack(anchor=Tkinter.NW, side=Tkinter.RIGHT) 

을 넣어해야합니다.