Python GUI - 向脚本传递输入

3 投票
1 回答
11341 浏览
提问于 2025-04-18 17:00

我现在有一个主要的 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里:

  1. 打开界面
  2. 把用户输入的偏好设置保存到文件里
  3. 像之前那样读取这个文件。

唯一需要注意的是,在你的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()

撰写回答