簡體   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