如何提示用户进行多次输入,然后将摘要打印到文件中?

时间:2019-01-28 23:23:59

标签: python file input printing

到目前为止,如果用户选择“ 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”,它将把最终详细信息附加到与第一顺序相同的文件中。

2 个答案:

答案 0 :(得分:0)

我发现,当需要大量用户输入时,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部分(如{{ 1}}部分,条目的文本变量附加到我们的变量上

3)要访问变量,请使用其{。{1}}部分中所示的.get()方法。同样,如果您想在其中放置一个值,则该变量还有一个.set()方法。例如,您可以先进行create_widgets(self):后跟lookup_csv_file的操作,然后GUI会使用显示的内容进行初始化。

4)将命令分配给按钮时,请勿包括self.user_input = tk.StringVar()。如果您放置self.user_input.set('Default CSV file')而不是(),则该命令将在初始化期间运行。

这些是我很难学习的一些要点,但是有了这些,您应该可以通过阅读可用的文档来快速学习!

答案 1 :(得分:0)

  

我尝试将代码运行为“ 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运行。