繁体   English   中英

更新tkinter窗口(Python 3.4)

[英]updating tkinter window (Python 3.4)

大家下午好

我一直在为学校项目制定联系书计划。 我已经完成了所有基础代码。 但是,我决定将其更进一步,并实现一个基本接口。 我正在尝试使用下面的代码片段显示所有联系人:

    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相当陌生,如果代码令人困惑,我深表歉意。 任何帮助将不胜感激!!

首先,代码段的顶部可能会更有效率:

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

考虑到我给你看了多少,它可能被认为欺骗了你使用它。 尽管对代码进行了更多研究,但该算法似乎一开始并不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM