【问题标题】:How can I prompt user for multiple inputs, then print summary to a file?如何提示用户进行多个输入,然后将摘要打印到文件中?
【发布时间】:2019-01-28 23:23:59
【问题描述】:

到目前为止,如果用户选择“n”不订购另一个硬盘驱动器,但需要写入文件,我可以在最后打印。我尝试将代码作为“python hdorders.py >> orders.txt”运行,但它不会提示问题;只显示一个空白行,如果我使用 Ctrl-C 中断,它会在文件中写入空白条目和 while 循环。我希望这是有道理的。

ui = raw_input("Would you like to order more hard drives?(y/n) ")
if ui == 'n':
    print '\n','\n',"**** Order Summary ****",'\n',row,'\n',"Number of HD's:",b,'\n',"Disk Slot Position(s):",c,'\n',"Disk Size(s):",d,"GB",'\n',"Dimensions:",e,'\n','\n',
    endFlag = True

我也希望这样,如果他们选择“y”,它将保存到一个文件并重新开始另一个磁盘订单(首先将以前的信息保存到文件中)。然后一旦他们完成(例如通过程序两次)并选择“n”,它会将最终详细信息附加到与第一个订单相同的文件中。

【问题讨论】:

  • 我尽力提供所有代码,但不断收到格式错误,它不允许我将其包含在帖子中。
  • 您的打印语句也可以压缩成一个格式化字符串,例如print("\n\n**** Order Summary ****\n{0}\nNumber of HD's: {1}\nDisk Slot Position(s): {2}\nDisk Size(s):{3}GB\nDimensions: {4}\n\n".format(row, b, c, d, e)) 我认为在最后输入所有内容也可以更轻松地更新/更改字符串中显示的变量

标签: python file input printing


【解决方案1】:

我发现,当需要大量用户输入时,GUI 可能是最佳选择。如果我的脚本使用少量我可以解析出来的用户输入,我只会尝试进行命令行输入。就个人而言,我会为每个输入创建一个 tkinter 组合框,并在 GUI 底部有一个按钮,用于处理所有输入并将它们写入文件。这是我如何制作 GUI 的框架

import tkinter as tk


class OOP:
    def __init__(self):
        self.win = tk.Tk()
        self.win.title("My Title")
        self.user_input = tk.StringVar()
        self.create_widgets()

    def lookup_csv_file(self):
        file = self.user_input.get()
        print(file)

    def create_widgets(self):
        tk.Button(self.win, text="Lookup CSV file", width=42, command=self.lookup_csv_file).pack(expand=1, fill='both')
        tk.Entry(self.win, textvariable=self.user_input).pack(expand=1, fill='both')


app = OOP()
app.win.mainloop()

这段代码显示了几个需要注意的重要事项:

1) 在大多数情况下,应使用面向对象编程 (OOP) 制作 GUI

2) 您要保留的变量应在__init__ 部分中初始化为 tk.StringVar()、tk.IntVar() 等。然后附加到 GUI 部分(如 create_widgets(self): 部分所示条目的文本变量附加到我们的变量

3) 要访问变量,请使用其 .get() 方法,如lookup_csv_file 部分所示。如果您想在其中放置一个值,该变量还有一个 .set() 方法。例如,您可以在self.user_input = tk.StringVar() 之后执行self.user_input.set('Default CSV file'),GUI 将按照所示进行初始化。

4) 为按钮分配命令时,不要包含()。如果您使用 command=self.lookup_csv_file() 而不是 command=self.lookup_csv_file,则该命令将在初始化期间运行。

这些是我难以学习的一些细节,但是有了这些,您应该能够通过查看可用的文档来快速学习!

【讨论】:

  • 这里是非官方的 tkinter 文档:effbot.org/tkinterbook 请注意,这不包括主题 tkinter (ttk),您可以在其中找到我提到的组合框。但是也有 tk 模块有类似的用法!
  • 我会调查的,谢谢。对原始输入也有好处吗?程序中有几个问题不能使用组合框。例如,第一个问题“服务器名称”引用了一个 csv 文件。
  • 是的,您可以使用tkinter.Entry(),这会为用户提供一个通用的文本字段,让他们可以随意填写!
  • 好的,谢谢,但是使用 tkinter 我必须重新学习如何重新编写所有代码。哈哈。我现在很难找到一个关于如何让用户输入服务器名称的线程,然后它在 csv 文件中查找它并显示该服务器的行(数据)。这是我使用 tkinter 的唯一优秀作品。再次感谢。
  • @ChristopherMetcalf 我添加了一个如何设置它的示例!希望这能回答您的问题,并且您可以接受答案,因此该线程将关闭
【解决方案2】:

我尝试将代码运行为“python hdorders.py >> orders.txt”,但它不会提示问题

您看不到提示,因为您将标准输出以及提示所在的位置重定向到文件orders.txt。更好的open 程序中的文件,无需在shell 处重定向:

if ui == 'n':
    orders = open('orders.txt', 'a')    # 'a' for appending
    print >>orders, '\n','\n',"**** Order Summary ****",'\n',row,'\n',"Number of HDs:",b,…
    orders.close()

- 以python hdorders.py 运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    相关资源
    最近更新 更多