更新tkinter窗口(Python 3.4)

时间:2014-04-19 15:41:05

标签: python loops user-interface tkinter

下午好,

我一直致力于学校项目的联系簿计划。我已经完成了所有底层代码。但是我决定更进一步,实现基本界面。我正在尝试使用下面的代码段显示所有联系人:

    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很新,如果代码混乱,我道歉。任何帮助将不胜感激!!

1 个答案:

答案 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()

考虑到我向你展示了多少,你可能会考虑作弊。然而,对代码做了一些更多的研究,似乎算法不会起作用。