下午好,
我一直致力于学校项目的联系簿计划。我已经完成了所有底层代码。但是我决定更进一步,实现基本界面。我正在尝试使用下面的代码段显示所有联系人:
elif x==2:
phonebook_data= open(data_path,mode='r',encoding = 'utf8')
if os.stat(data_path)[6]==0:
print("Your contact book is empty.")
else:
for line in phonebook_data:
data= eval(line)
for k,v in sorted(data.items()):
x= (k + ": " + v)
from tkinter import *
root = Tk()
root.title("Contacts")
text = Text(root)
text.insert('1.0', x)
text.pack()
text.update()
root.mainloop()
phonebook_data.close()
该程序有效,但每个联系人都会在新窗口中打开。我想在一个循环中显示所有相同的信息。我对tkinter很新,如果代码混乱,我道歉。任何帮助将不胜感激!!
答案 0 :(得分:0)
首先,代码段的顶部效率会更高:
phonebook_data= open(data_path,mode='r',encoding = 'utf8')
应更改为
phonebook_data = open(data_path)
。
之后,只需使用:
contents = phonebook_data.read()
if contents == "": # Can be shortened to `if not contents:`
print("Your contact book is empty.")
顺便说一句,最好在使用完毕后立即关闭文件。
phonebook_data = open(data_path)
contents = phonebook_data.read()
phonebook_data.close()
if contents == "":
print("Your contact book is empty.")
现在您的图形问题。首先,您应该考虑是否真的需要此应用程序的图形界面。如果是这样的话:
# Assuming that the contact book is formatted `Name` `Number` (split by a space)
name_number = []
for line in contents.split("\n"): # Get each line
name, number = line.split()
name_number.append(name + ": " + number) # Append a string of `Name`: `Number` to the list
name_number.sort() # Sort by name
root = Tk()
root.title("Contact Book")
text = Text(root)
text.pack(fill=BOTH)
text.insert("\n".join(name_number))
root.mainloop()
考虑到我向你展示了多少,你可能会考虑作弊。然而,对代码做了一些更多的研究,似乎算法不会起作用。