Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Drakaris en 12 Septiembre 2020, 19:49 pm



Título: llamar modulo dentro de una clase | Python3
Publicado por: Drakaris en 12 Septiembre 2020, 19:49 pm
Buenas. Tengo un problema....

Tengo una clase, donde cuya clase estoy llamando a la funcion OS_system(), importado del paquete ' init'
Código
  1. from init import *
  2. class notification:
  3.       # [CODE]
  4. def popup(self, title, type_title, content_text, type_image, Image=Image):
  5. try:
  6. main = Tk()
  7. ico = Image.open(OS_system().path_tkinter("SockServices.png"))
  8.                        # [...]
  9.  

init modulo:
Código
  1. class OS_system:
  2. def __init__(self):
  3. self.system = platform.system()
  4.        # [...]
  5. def path_tkinter(self,image):
  6. if self.system == "Linux":
  7. return "/etc/SockServices/mods/popup/images/"+str(image)
  8. elif self.system == "Windows":
  9. return "C:\Program Files\SockServices\mods\popup\images\\"+str(image)
  10.  
El problema es que me da el error
Citar
NameError: name 'OS_system' is not defined

El problema es que la clase OS_system del modulo init no es importada dentro de la clase notification. Como lo hago?[/code]


Título: Re: llamar modulo dentro de una clase | Python3
Publicado por: tincopasan en 13 Septiembre 2020, 16:23 pm
hola:
        como no hay forma de saber que estás usando en tu código y esto le puede servir a otro, hago un ejemplo básico desde 0 y funcional:

módulo inicio:

Código
  1. import os
  2.  
  3. class Os_system:
  4.    def __init__(self):
  5.        self.system = os.name #me parece mejor que platform, salvo que sigas usando 2.7
  6.  
  7.    def path_tkinter(self,imagen):
  8.        if self.system == "nt":
  9.            return f"windows/{imagen}" #por una cuestión de fiaca cambié el camino
  10.        elif self.system == 'posix':
  11.            return f"linux/{imagen}"
  12.  
  13.  
  14.  

codigo principal:

Código
  1. from inicio import *
  2. import tkinter as tk
  3. from PIL import ImageTk, Image
  4. class uno:
  5.    def __init__(self):
  6.        ventana = tk.Tk()
  7.        imagen = Image.open(Os_system().path_tkinter("bola.png")) #la imagen más a mano que tenía
  8.        tkimagen = ImageTk.PhotoImage(imagen)
  9.        imagen= tk.Label(ventana,image=tkimagen)
  10.        imagen.pack()
  11.        ventana.mainloop()
  12.  
  13.  
  14. app=uno()        
  15.  

esto funciona.

Saludos.