Я хочу добавить значение метки в свою базу данных из MySQL. Я хочу сделать это, потому что я не хочу, чтобы пользователь выбирал данные каждый раз, когда он вставляет что-либо. Вот код:
from tkinter import *
from tkinter import messagebox
import mysql.connector
import datetime
def Ok():
tip=e1.get()
descriere=e2.get()
data=e3.get()
timp=e4.get()
mysqldb = mysql.connector.connect(host = "localhost",user = "root",password = "", database = "reglog")
mycursor= mysqldb.cursor()
try:
sql = "INSERT INTO anunturib(id,tip,descriere,data,timp) VALUES (%s,%s,%s,%s,%s)"
val = ("",tip,descriere,data,timp)
mycursor.execute(sql,val)
mysqldb.commit()
messagebox.showinfo("information","Record inserted succesfully!")
except Exception as e:
print(e)
mysqldb.rollback()
mysqldb.close()
root= Tk();
root.title("Anunturi")
root.geometry("300x250")
global e1
global e2
global e3
global e4
Label(root,text = "Tip cerere:").place(x=10,y=10)
Label(root,text = "Descriere").place(x=10,y=40)
Label(root,text = "Data publicare:").place(x=10,y=80)
Label(root,text = "Data expirare:").place(x=10,y=120)
TodayDate = datetime.datetime.now()
an = TodayDate.strftime("%Y")
luna = TodayDate.strftime("%m")
zi = TodayDate.strftime("%d")
data=zi + "-" + luna + "-" + an
e3=Label(root,text=data).place(x=148,y=80)
e1 = Entry(root)
e1.place(x=148,y=10)
e2 = Entry(root)
e2.place(x=148,y=40)
e4 = Entry(root)
e4.place(x=148,y=120)
Button(root,text = "Add",command=Ok ,height=3, width=13).place(x=10,y=180)
root.mainloop()
Я не нашел ничего, связанного с этим. Таким образом я получаю ошибку: данные = e3.получить () AttributeError: объект «NoneType» не имеет атрибута «получить»
Изменить e3=Label(root,text=data).place(x=148,y=80)
на
e3=Label(root,text=data)
e3.place(x=148,y=80)
Хорошо, теперь я получаю эту ошибку: Файл "C:\xampp\htdocs\licenta\python\insert.py", строка 10, в Ok data=e3.get() AttributeError: объект "Label" не имеет атрибута "get"
Проблема именно в том, что говорится в сообщении об ошибке. e3
содержит ссылку на объект Label
, а объект Label
не имеет атрибута с именем get
... то есть он не поддерживает метод get()
. У объекта Entry
есть метод get()
. Вот почему два вызова get()
перед тем, который дал сбой, работают нормально. - Вроде смысл, да? Метка - это просто визуальная вещь... она не принимает ввод, поэтому нет смысла пытаться получить от нее значение.
Хорошо, это было ясно. У вас был другой вариант, чтобы получить эту дату? Я имею в виду, может быть, я храню его в другом объекте?
Ответ рядом с вами! Что вам нужно, так это значение метки, и каково значение метки? Переменная data
. Итак, вы не можете использовать e3.get()
по 2 причинам. Во-первых, get()
не существует для Label
. Во-вторых, текст метки не зависит от значения data
. Таким образом, вы можете просто вставить его:
def Ok():
tip=e1.get()
descriere=e2.get()
# data=e3.get() # Don't define `data`, so `data` is the old data defined before
timp=e4.get()
....
....
Также вам не нужно вручную получать день, месяц и год и превращать все это в строку. Вместо этого используйте strftime
, например:
today_date = datetime.datetime.now()
fmt = '%d-%m-%Y' # Format you want to change a datetime obj to
data = datetime.datetime.strftime(today_date,fmt)
Так же хочется упомянуть, что текст этикетки всегда можно получить с помощью e3.cget('text')
или e3['text']
. Но нам это не нужно здесь, так как это просто переменная data
.
Также, чтобы понять, почему вы получили начальную AttributeError
, прочитайте: Tkinter: AttributeError: объект NoneType не имеет атрибута <имя атрибута>
e3=Label(root,text=data).place(x=148,y=80)
присвоит возвращаемое значениеLabel.place()
e3
. Я предполагаю, что это значение равноNone
.