到目前为止,如果用户选择"n"不订购另一个硬盘驱动器,但需要写入文件,我可以在最后打印。我尝试以"python hdorders.py>> 订单.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",它将最终详细信息附加到与第一个订单相同的文件中。
我发现当需要大量用户输入时,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)在大多数情况下,GUI应该使用面向对象编程(OOP)进行
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()
则该命令将在初始化期间运行。
这些是我很难学习的一些细节,但是有了这个,您应该能够通过查看可用的文档来快速学习!
我尝试以"python hdorders.py>> order.txt"运行代码,但它不会提示问题
您看不到提示,因为您将标准输出(提示也重定向到文件orders.txt
。最好在程序中打开文件,而无需在 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
运行。