我不是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)```
问题是您如何定义课程。当您定义一个类时,您想使用该对象的对象来继承属性,在这种情况下,我了解到您希望该类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__
函数中进行了更改。
希望这会有所帮助!