我正在为学校的项目制作GUI。我在GUI中的所有按钮都与我创建的功能绑定在一起。这些函数需要已经预定义的函数。对于一些预定义的函数,我需要一个或两个参数,我已用条目解决了这个问题。我输入连接到特定按钮的右边条目中的参数,当我按下按钮时,该函数将使用相应的参数运行。
我想要做的是以某种方式按下按钮时,该功能应保存到列表中而不是立即执行。当我按下“运行”按钮(我将创建一个新按钮)时,我的列表中的所有内容都将被执行。我一直在考虑使用列表框,但我不确切知道它们是如何工作的,或者甚至可以运行包含许多函数的列表框。有人对我有任何想法或解决方案吗?我可以使用这个列表框还是还有其他更好用的东西?
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.entry1 = IntVar()
self.entry2 = IntVar()
def do_something():
value1 = self.entry1.get()
value2 = self.entry2.get()
self.listbox.insert(END, "predefined_function(value1, value2)")
def run_listbox_contents():
pass
self.button = Button(frame, text="Move", command=lambda: do_something())
self.button.pack(side=TOP)
self.entry1.set("value1")
self.entry = Entry(frame, textvariable=self.entry1)
self.entry.pack(side=TOP)
self.entry2.set("value2")
self.entry = Entry(frame, textvariable=self.entry2)
self.entry.pack(side=TOP)
self.listbox = Listbox(master)
self.listbox.pack(side=TOP)
root = Tk()
app = App(root)
root.title("Mindstorms GUI")
root.geometry("800x1200")
root.mainloop()
root.destroy()
答案 0 :(得分:1)
只需使用标准清单。
类似这样的事情
def hest(txt):
print "hest: " +txt
def horse(txt):
print "horse: " + txt
funcList = []
funcList.append(hest)
funcList.append(horse)
for x in funcList:
x("Wow")
此输出
hest: Wow
horse: Wow
这是你想要的吗?
答案 1 :(得分:0)
如果我是你,我不想将功能保存到列表中。我会为你建议另一个解决方案。
我想你已经听说过 MVC(模型 - 视图 - 控制器)的原理。在您的情况下,列表框是视图的一部分,保存功能然后立即调用它们的过程是控制器的一部分。 将它们分开。
您可能希望在列表框中保存并显示任何字符串,以便让用户知道相应的功能已经登记并准备好运行。例如,保存字符串 "Function1 aug1 aug2 aug3"
或"Funtion2 aug1 aug2"
或您喜欢的任何作为相应功能的句柄。
对于控制器部分,编写一个函数(比如说conductor()
)。 读取列表中的句柄字符串,解析它们和调用相应的函数。如果您想要运行登记的功能,只需拨打conductor()
。
<强>更新强>
由于你的评论我明白你是一个很新的程序。让我向您展示如何使用给定的变量名编写最简单的解析器。
def run_listbox():
to_do_list = #get the list of strings
for handle_string in to_do_list:
#Let's say you got
#handle_string = "Predfined_function1 value1 value2"
#by here
handle = handle_string.split(" ")
#Split the string by space, so you got
#handle = ["Predfined_function1", "value1", "value2"]
#by here
if handle[0] == "Predfined_function1":
Predfined_function1(handle[1], handle[2]) #Call Predfined_function1(value1, value2)
elif handle[0] == "Predfined_function2":
Predfined_function2(handle[1], handle[2])
#elif ...
#...
#elif ...
#...
#elif ...
#...
这不是一个完美的解析器,但我希望它可以让你知道解析器是什么样的。