我目前有一个主要的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
我想用GUI替换input.py
。 Tkinter似乎是一个明智的起点,我可以看到如何创建一个GUI,使用户能够设置他们原本在input.py
中设置的各种选项。但是,我不知道如何从GUI向main.py
传递此信息。是否存在等效于__import(filename)__
的{{1}},它可以从用户在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()
答案 0 :(得分:1)
使用一个文件,将GUI中的选择保存到文件中(就像之前使用input.py一样),然后读取文件。
所以,在你的main.py
中这里唯一的缺点是您必须在main.py
脚本中确保GUI已经关闭。为此你可以使用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()