使用GUI输入变量并在python中运行脚本

时间:2014-02-07 15:45:13

标签: python user-interface

我目前正在python中编写CFD程序,该脚本在计算中使用了许多预定义的全局变量。

我想生成一个GUI,允许用户输入所有这些变量,然后运行脚本并在主控制台中返回结果。我曾尝试使用Tkinter来做到这一点,但无法找到设置全局变量的方法。

下面是一个简单的GUI我试图设计完成一个更简单的计算,也需要设置全局变量。

'''GUI 2'''
import Tkinter
factor = 10

def GUIrun(n):
    return n * factor

class simpleGUI(Tkinter.Tk):
    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent)
        self.parent=parent

    def initialize(self):
        self.grid()

        self.entryVariable = Tkinter.StringVar()
        self.entry = Tkinter.Entry(self,textvariable=self.entryVariable)
        self.entry.grid(column=0,row=0,sticky='EW')
        self.entry.bind("<Return>",self.OnPressEnter)
        self.entryVariable.set("n")

        button=Tkinter.Button(self,text="Run",command=self.OnButtonClick)
        button.grid(column=1,row=0)

        self.labelVariable = Tkinter.StringVar()
        label=Tkinter.Label(self,textvariable=self.labelVariable,
        anchor="w",fg="white",bg="blue")
        label.grid(column=0,row=1,columnspan=2,sticky='EW')
        self.labelVariable.set("Hello!")

        self.grid_columnconfigure(0,weight=1)
        self.resizable(True,False)
        self.entry.focus_set()
        self.entry.selection_range(0, Tkinter.END)

    def OnPressEnter(self,event):
        n = self.entryVariable.get()
        self.labelVariable.set("n = " +self.entryVariable.get())
        self.entry.focus_set()
        self.entry.selection_range(0, Tkinter.END)


    def OnButtonClick(self):
        n=self.entryVariable.get()
        return GUIrun(n)


if __name__=="__main__":
    app=simpleGUI(None)
    app.title('poster')
    app.initialize()
    app.mainloop()

我将不胜感激任何帮助 谢谢

1 个答案:

答案 0 :(得分:1)

Tkinter与全局变量的任何其他模块没有什么不同。只需将变量声明为全局变量,然后将其设置为某个值。

您的代码正在运行,但我不确定它是否正在执行您希望它执行的操作。如果要进行数学运算,则需要将输入值转换为整数:

def OnButtonClick(self):
    n=int(self.entryVariable.get())
    ...

您的另一个选择是使用IntVar而不是StringVar来为您进行转换。

另一个问题似乎是对Tkinter如何运作的根本误解。您的OnButtonClick函数使用适当的参数正确调用函数,然后返回结果。你认为它在哪里归还?在任何地方都没有代码可以从按钮命令中获得返回值。

您需要对结果执行某些操作 - 将其打印出来,将其传递给另一个函数或设置变量。在按钮回调中调用return类似于抛弃结果。