Как получить информацию о «вступлении» в класс python - PullRequest
0 голосов
/ 20 марта 2020

Я не эксперт в python и мне нужна помощь в управлении классами в python и GUI (Tkinter). У меня есть 3 файла с 3 разными классами (класс Validacion, класс Ventana, класс Ejecutar) и нужно сделать запрос с моей базой данных, я получаю сообщение об ошибке «У объекта« Validacion »нет атрибута« _tk »». это мой код:

from tkinter import *
from Ventana import *
from tkinter import messagebox


class Validacion:
    miidvendedor = StringVar
    minombrevendedor = StringVar
    def __init__ (self):
        self.validacion = Tk()
        self.validacion.title("Inventario")
        self.validacion.geometry("400x200")
        self.validacion.resizable(0, 0)
        self.validacion.iconbitmap("icono.ico")
        self.validacion.config(background='lavender')

        self.miFrame = Frame(self.validacion)
        self.miFrame.pack()
        self.miFrame.config(backgroun='lavender')

        cuadronombrevendedor = Entry(self.miFrame, textvariable=self.minombrevendedor)
        cuadronombrevendedor.grid(row=0, column=1, sticky="w", padx=10, pady=10)

        cuadroidvendedor = Entry(self.miFrame, textvariable=self.miidvendedor)
        cuadroidvendedor.config(show="*")
        cuadroidvendedor.grid(row=1, column=1,sticky="w", padx=10, pady=10)

        mensajenombre = Label(self.miFrame, text="Nombre Vendedor:")
        mensajenombre.config(bg='lavender', font=("Bodoni MT", 14))
        mensajenombre.grid(row=0, column=0,sticky="nsew", padx=10, pady=10)

        mensajeid = Label(self.miFrame, text="ID Vendedor:")
        mensajeid.config(bg='lavender', font=("Bodoni MT", 14))
        mensajeid.grid(row=1, column=0, sticky="nsew", padx=10, pady=10)

        enter = Button(self.miFrame, text="Enter", bg="gray30", fg="white", command=self.validar)
        enter.grid(row=2, column=1, sticky="nsew",padx=10, pady=10 )

        self.validacion.mainloop()

    def validar(self):
        try:
            id = self.miidvendedor.get(self)
            nombre = self.minombrevendedor.get(self)

            connectiondb = pymysql.Connection(host=HOST, port=PORT, user=USER, passwd=PASSWORD, db=DB,)
            micursor = connectiondb.cursor()
            query = "SELECT * FROM vendedor WHERE idvendedor = '%s'" % id
            micursor.execute(query)
            tupla = micursor.fetchall()
            for i in tupla:
                if i[1] == nombre:
                    objeto = Ventana()
                    self.validacion.withdraw()
                else:
                    messagebox.showerror("Error","Datos erroneos")
            connectiondb.commit()
            micursor.close()
            connectiondb.close()
        except Exception as e:
            messagebox.showerror("Conection Data Base", e)```

1 Ответ

0 голосов
/ 20 марта 2020

Проблема в том, как вы определяете свой класс. Когда вы определяете класс, вы используете объект от которого вы хотите наследовать свойства, в этом случае я понимаю, что вы хотите, чтобы Class Validacion стал объектом TK, в этом смысле:

from tkinter import *
from Ventana import *
from tkinter import messagebox


class Validacion(Tk):
    miidvendedor = StringVar
    minombrevendedor = StringVar
    def __init__ (self,*args, **kwargs):
        super(Validacion ,self).__init__(*args, **kwargs)
        self.title("Inventario")
        self.geometry("400x200")
        self.resizable(0, 0)
        self.iconbitmap("icono.ico")
        self.config(background='lavender')

        self.miFrame = Frame()
        self.miFrame.pack()
        self.miFrame.config(background='lavender')

Примечание что self.ventana было изменено только для self, потому что мы определили класс Validacion как подкласс TK, и поэтому он наследует все свои свойства и атрибуты, которые изменяются в функции __init__.

Hope это помогает!

...