Python GUI - 向脚本传递输入
我现在有一个主要的 Python 脚本(main.py
),它会从另一个脚本(input.py
)读取输入,这个脚本可以被用户修改。用户可以在第二个脚本中设置一些变量,比如维度数量(ndim
)、点的数量(npts
)等,然后这些变量会被 main.py
读取,方法如下:
filename = sys.argv[-1]
m = __import__(filename)
ndim = m.ndim
npts1 = m.npts1
npts2_recorded = m.npts2_recorded
这个脚本是通过以下命令执行的:
python main.py input
我想把 input.py
替换成一个图形用户界面(GUI)。Tkinter 看起来是个不错的起点,我可以看到如何创建一个 GUI,让用户设置他们原本在 input.py
中设置的各种选项。但是,我不知道如何将这些信息从 GUI 传递到 main.py
。有没有类似于 __import(filename)__
的方法,可以从用户在 GUI 中的选择中提取信息,或者有没有其他方法可以实现同样的效果。
一个基于下面答案的最小(不)工作示例:
这段代码创建了一个文件 example.txt
,但是给 block1
的文本并没有写入到文件中。
from Tkinter import *
def saveCallback():
with open("example.txt",'w') as outfile:
outfile.write(block1.get())
def UserInput(status,name):
optionFrame = Frame(root)
optionLabel = Label(optionFrame)
optionLabel["text"] = name
optionLabel.pack(side=LEFT)
var = StringVar(root)
var.set(status)
w = Entry(optionFrame, textvariable= var)
w.pack(side = LEFT)
optionFrame.pack()
return w
if __name__ == '__main__':
root = Tk()
block1 = UserInput("", "Block size, dimension 1")
Save_input_button = Button(root, text = 'Save input options', command = saveCallback())
Save_input_button.pack()
root.mainloop()
1 个回答
3
用一个文件来处理这个问题,把用户在界面上选择的内容保存到一个文件里(就像你之前用input.py那样),然后再读取这个文件。
所以,在你的main.py里:
- 打开界面
- 把用户输入的偏好设置保存到文件里
- 像之前那样读取这个文件。
唯一需要注意的是,在你的main.py
脚本中,你得确保界面已经关闭。为此,你可以使用subprocess模块,里面有几个函数可以让你在进程结束之前阻塞,简单来说就是等着。
用这种方法,你只需要输入:
python main.py
然后在main.py
的某个地方:
# The function call will wait for command to complete, then return the returncode attribute.
rcode = subprocess.call(['python', 'gui_input.py'])
写入一个输入框的值到文件的代码示例。
import tkinter
top = tkinter.Tk()
def saveCallback():
with open("example.txt", 'w') as outfile:
outfile.write(e1.get())
e1 = tkinter.Entry(top)
b1 = tkinter.Button(top, text ="Save", command = saveCallback)
e1.pack(side=tkinter.LEFT)
b1.pack(side=tkinter.RIGHT)
top.mainloop()