【问题标题】:Using a GUI to input variables and run a script in python使用 GUI 输入变量并在 python 中运行脚本
【发布时间】:2014-03-05 02:46:12
【问题描述】:

我目前正在用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()

如果有任何帮助,我将不胜感激 谢谢

【问题讨论】:

  • 您的问题是什么?为什么需要全局变量?如果您确实有一个使用大量全局值的脚本,我认为您应该重写并将它们包装在一个类中。

标签: python user-interface


【解决方案1】:

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

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

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

您的另一个选择是使用IntVar 而不是StringVar,它将为您完成转换。

另一个问题似乎是对 Tkinter 工作原理的根本误解。您的 OnButtonClick 函数使用适当的参数正确调用该函数,然后返回结果。你认为它会返回到哪里?任何地方都没有期望按钮命令返回值的代码。

你需要对结果做一些事情——要么打印出来,把它传递给另一个函数,要么设置一个变量。在按钮回调中调用 return 类似于丢弃结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 2019-11-11
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    相关资源
    最近更新 更多