【问题标题】:Python gui - passing input to scriptPython gui - 将输入传递给脚本
【发布时间】:2014-08-12 14:42:32
【问题描述】:

我目前有一个主 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)__ 的方法可以从用户在 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()

【问题讨论】:

  • python main.py input 是正确的。 Python 将.py 添加到input,因此python main.py input.py 将尝试读取文件input.py.py

标签: python user-interface tkinter


【解决方案1】:

为此使用一个文件,将 GUI 中的选择保存到一个文件中(就像您之前使用 input.py 所做的那样),然后读取该文件。

所以,在你的 main.py 中

  1. 打开图形用户界面
  2. 用户在文件中输入的首选项
  3. 像以前一样读取文件。

这里唯一的缺点是您必须确保在您的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()

【讨论】:

  • 您能否提供更多详细信息。我对 tkinter 很陌生。例如,您如何保存 GUI 首选项。目前我正在尝试一个带有按钮和函数 .get() 的简单示例来打印选项的输出,但我没有得到任何输出。
  • “保存 GUI 首选项”我的意思是:保存用户在 GUI 中输入的首选项。您只需要一个按钮(我们称为 buttonSave),当点击一个函数时,将条目的内容写入文件。
  • 是的,我意识到了这一点。但目前,我什至无法通过按下按钮将条目打印到终端,更不用说将它们保存到文件中了。
  • 感谢您的回答。您给出的最小示例是有道理的,但是,我仍然无法让它与我的代码一起使用 - 它在按下按钮时创建文件 example.txt,但没有内容写入该文件。不知何故,python 无法读取block1 的用户输入,或者可能存在排序问题?
猜你喜欢
  • 2017-08-07
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 2020-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多