Как добавить элементы в словарь? - PullRequest
0 голосов
/ 07 февраля 2020

дамба пытается создать проект телефонной книги, используя python и Tkinter. Мне нужно добавить номера телефонов в мою телефонную книгу, и я написал код для этого, но python выдает ошибку.

from tkinter import*
#defining the submit button
def submit():
    new = entry2.get()
    new2 = entry3.get()
    my_dict.update({new:new2})

#definig the add button
def add():
top = Toplevel(root)
top.configure(background="black")
top.geometry("400x400")
top.title("Add new member")
label6 =Label(top,text="Welcome",bg="black",fg="orange")
label6.place(x=135,y=13)
global entry2
entry2 = Entry(top,width=23)
entry2.place(x=102,y=78)
label7 = Label(top,text="Name",bg="black",fg="orange")
label7.place(x=48,y=78)
global entry3
entry3 = Entry(top,width = 23)
entry3.place(x=108,y=127)
label8 = Label(top,text="phone number",bg ="black",fg="orange")
label8.place(x=0,y=129)
button3 = Button(top,text="Submit",command = submit)
button3.place(x=185,y=200)
#defining the chek button
def check():
global my_dict

my_dict = {"john":'7598769587'}
if entry.get() in my_dict: 
   label4 = Label(root,text=my_dict[entry.get()],bg="black",fg="orange").place(x=178,y=167)
   label5 = Label(root,text = entry.get()+" is :",bg ="black",fg = "orange").place(x=120,y=167)

   #creating the main window  
   root = Tk()
   root.title("vole phone book")
   root.geometry("400x400")
   root.configure(background="black")
   label = Label(root,text="phone book",bg="black",fg="orange",width=13).place(x=133,y=23)
   label2 = Label(root,text="Enter here.",bg = "black",fg="orange").place(x=2,y=89)
   entry = Entry(root,width = 27)
   entry.place(x=89,y=90)
   button =Button(root,text="Check",bg="yellow",fg="red",command=check).place(x=190,y=129)
   button2=Button(root,text="Add",width=23,command = add).place(x=120,y=300)

   root.mainloop()

Это мой код, и когда я выполняю этот код

    my_dict.update({new:new2})
    NameError: name 'my_dict' is not defined

python, появляется указанная выше ошибка. Что делать?

Ответы [ 3 ]

1 голос
/ 07 февраля 2020

Хотя вы используете global my_dict, когда определяете my_dict в check, оно все равно будет определено только после того, как вы позвоните check. И действительно, если вы сначала вызовете check, а затем попытаетесь набрать add число, это сработает.

Определите my_dict в глобальной области видимости вместе с root et c., тогда он будет работать независимо от того, в каком порядке используются кнопки.

my_dict = {"john":'7598769587'}
root = Tk()
...

(тогда вы также можете удалить global my_dict из проверки, поскольку он будет только читать переменную.)

0 голосов
/ 07 февраля 2020

Вот рабочее решение:

# File name: phone-book-demo.py

from tkinter import*

# Define global phone book
global my_dict
my_dict = {"john":'7598769587'}

#defining the submit button
def submit():
    person = entry2.get()
    phone = entry3.get()
    my_dict.update({person:phone})
    print(my_dict)

#definig the add button
def add():
    top = Toplevel(root)
    top.configure(background="black")
    top.geometry("400x400")
    top.title("Add new member")
    label6 =Label(top,text="Welcome",bg="black",fg="orange")
    label6.place(x=135,y=13)

    global entry2
    entry2 = Entry(top,width=23)
    entry2.place(x=102,y=78)
    label7 = Label(top,text="Name",bg="black",fg="orange")
    label7.place(x=48,y=78)

    global entry3
    entry3 = Entry(top,width = 23) 
    entry3.place(x=108,y=127)
    label8 = Label(top,text="phone number",bg ="black",fg="orange")
    label8.place(x=0,y=129)
    button3 = Button(top,text="Submit",command = submit)
    button3.place(x=185,y=200)

#defining the chek button
def check():
    person = entry.get()
    if person in my_dict: 
        phone = my_dict.get(person)
        print("Found: " + person + " : " + phone)
        # Erase the old result by placing a blank label
        label0 = Label(root, width=200, bg ="black", fg = "black").place(x=10,y=167)
        label5 = Label(root, text = person + " : " + phone, bg ="black", fg = "orange").place(x=10,y=167)

#creating the main window  
root = Tk()
root.title("vole phone book")
root.geometry("400x400")
root.configure(background="black")
label = Label(root,text="phone book",bg="black",fg="orange",width=13).place(x=133,y=23)
label2 = Label(root,text="Enter here.",bg = "black",fg="orange").place(x=2,y=89)
entry = Entry(root,width = 27)
entry.place(x=89,y=90)
button =Button(root,text="Check",bg="yellow",fg="red",command=check).place(x=190,y=129)
button2=Button(root,text="Add",width=23,command = add).place(x=120,y=300)
root.mainloop()

Вывод:

$ python3 phone-book-demo.py 
Found: john : 7598769587
{'john': '7598769587', 'Alice': '123'}
{'john': '7598769587', 'Alice': '123', 'Bob': '777'}
Found: Alice : 123
Found: Bob : 777

Скриншоты телефонной книги windows: Screenshots of the phone book windows

0 голосов
/ 07 февраля 2020

Я думаю, вам просто нужно установить my_dict как глобальное в вашей submit() функции

def submit():
    global my_dict
    new = entry2.get()
    new2 = entry3.get()
    my_dict[new] = new2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...