2016-04-02 19 views
2

Bir program yapmaya çalışıyorum, girişte bir kod girebilirsiniz ve program kodu çalıştıracaktır.exec programım çalışmıyor

Enter'a bastığınızda, program bir öncekinin altındaki başka bir giriş oluşturur.

"Program Yürüt" düğmesine bastığınızda, yazdığınız tüm kodlar çalıştırılacak.

from tkinter import * 

class Application(Frame): 
    def __init__(self, master): 
    Frame.__init__(self, master) 
    self.grid() 

    self.entry1=Entry(self) 
    self.entry1.grid(row=0, column=0, sticky=W) 

    self.bttn1=Button(self, text="Execute code", command=self.execute_code) 
    self.bttn1.grid(row=1, column=9, sticky=W) 

    self.rows=0 

    self.entry1.bind("<Return>", self.down) 



    def execute_code(self): 
     self.code=self.entry1.get() 

     try: 
     exec(self.code) 
     except: 
     print("There is something wrong with this code!") 

def down(self,event): 
     self.rows+=1 

     entry=Entry(self) 
     entry.grid(row=self.rows, column=0, sticky=W) 
     self.code=self.code+"\n"+entry.get() 
     entry.bind("<Return>", self.down) 


root=Tk() 
root.title("Executing code") 
root.geometry("500x500") 
app=Application(root) 

Sorun şu ki, düğmeye bastığımda, yalnızca ilk girişi yürütür.

Birisi bana kodumda neyin yanlış olduğunu söyleyebilir mi?

+0

tek bir çok satırlı metin alanı kullanma hakkında ne düşünüyorsunuz? –

+0

Baskı için çalışır (3), ne yapmaya çalışıyorsunuz? –

+0

Ve Enter'a bastığınızda çöküyor. –

cevap

1

"Çok satırlı" girişleri işleme biçiminiz çalışmaz. girin, yeni bir Entry widget'ı oluşturun ve hemen içeriğini self.code'a ekleyin. Bununla birlikte, bu noktada içerik '''dir ve bu yeni Entry için bir referans tutmazsınız, bu nedenle, kullanıcı daha sonra metin girme şansına sahip olduktan sonra içeriği almanın bir yolu yoktur.

Sen olabilir mağaza farklı Entry bir listede örnekleri, ama bunun yerine sadece tek bir Multi-line Text widget'ı kullanmak öneririz:

yerine daha tek satırlık giriş alanları ekleme
class Application(Frame): 
    def __init__(self, master): 
     Frame.__init__(self, master) 
     self.grid() 

     self.entry1 = Text(self) 
     self.entry1.grid(row=0, column=0, sticky=W) 

     self.bttn1 = Button(self, text="Execute code", command=self.execute_code) 
     self.bttn1.grid(row=1, column=0, sticky=W) 

    def execute_code(self): 
     code = self.entry1.get("0.0", "end") 
     try: 
      exec(code) 
     except: 
      print("There is something wrong with this code!")