首页 > 解决方案 > 如何在python类中获取“条目”的信息

问题描述

我不是 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)```

标签: pythonclasstkinterpycharmtkinter-entry

解决方案


问题是你如何定义你的班级。当您定义一个类时,您使用的对象是您想要继承的属性,在这种情况下,我理解您希望 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因为我们将 Class Validacion 定义为 TK 的子类,因此它继承了它的所有属性和属性,这些属性和属性在__init__函数中发生了更改。

希望这可以帮助!


推荐阅读