我的执行程序无效

时间:2016-04-02 17:24:04

标签: python tkinter

我正在尝试创建一个程序,在其中您可以在条目中输入代码,程序将执行代码。

当您按Enter键时,程序将在前一个下方创建另一个条目。

当您按下“执行程序”按钮时,将执行您编写的所有代码。

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)

问题是,当我按下按钮时,它只执行第一个条目。

有人能告诉我代码中有什么问题吗?

1 个答案:

答案 0 :(得分:1)

您处理“多行”条目的方式不起作用。按 Enter 即可创建新的Entry小部件,并立即将其内容附加到self.code。但是,此时内容为'',您也没有保留对新Entry的引用,因此在用户有机会之后无法获取内容输入一些文字。

可以将不同的Entry个实例存储在列表中,但我建议您只使用一个多行Text小部件:

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!")