我正在尝试创建一个程序,在其中您可以在条目中输入代码,程序将执行代码。
当您按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)
问题是,当我按下按钮时,它只执行第一个条目。
有人能告诉我代码中有什么问题吗?
答案 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!")