【问题标题】:updating tkinter window (Python 3.4)更新 tkinter 窗口(Python 3.4)
【发布时间】:2014-04-19 15:41:04
【问题描述】:

大家下午好,

我一直在为一个学校项目制定通讯录计划。我已经完成了所有底层代码。但是,我决定更进一步并实现一个基本接口。我正在尝试使用下面的代码 sn-p 显示所有联系人:

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

【问题讨论】:

    标签: python loops user-interface tkinter


    【解决方案1】:

    首先,sn-p 的顶部可能效率更高:

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

    考虑到我向您展示了多少,您使用它可能会被视为作弊。不过,对代码进行更多研究,该算法似乎一开始就不起作用。

    【讨论】:

    • 首先非常感谢大家的指点!我会尽我最大的努力来实现一些简化,然后我会开始研究最后的代码。再次感谢!
    • @user3185748:如果您知道文件是以 utf-8 编码的,请保留 encoding=utf-8 参数。如果未指定 encoding open() 使用 locale.getprefferedencoding() 可能会返回不同的字符编码并损坏您的数据。
    猜你喜欢
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多