Как вызвать функцию, находящуюся в классе?

Мне нужно вызвать функцию, находящуюся в классе:

from tkinter import *
import traceback
from tkinter import *
import logging
from threading import Thread

root=Tk()

text=Text(root)                                                                                 
text.pack(fill=BOTH)

class StdoutDirector(object):
    print(object)
    def __init__(self, text_area):
        self.text_area = text_area

    def write(self, msg):                               
        self.text_area.insert(END, msg)

class App(Frame):
    def __init__(self, master):
        self.master = master
        Frame.__init__(self, master, relief=SUNKEN, bd=2)
        self.start()

    def start(self):
        self.master.title("Test")
        self.submit = Button(self.master, text='Run', command=self.do_run, fg="red")
        self.submit.pack(side=TOP)
      
        
        self.text_area = Text(self.master, height=10, bg='black',fg="white")
        self.text_area.pack(side=BOTTOM,fill=X)

    def do_run(self): # нужно вызвать эту функцию

        a = text.get(1.0, END)
        self.text_area.delete(1.0, END)
        t = Thread(target=print_stuff, args = (a,))                  
        sys.stdout = StdoutDirector(self.text_area)
        
                                  
        logger = logging.getLogger()                                   
        console = logging.StreamHandler(stream=sys.stdout)             
        logger.addHandler(console)                                     
        t.start()
    def do():
       do_run(self)
    

def print_stuff(a):                                                   
    logger = logging.getLogger('print_stuff')      

    
    print("[Start project]_\n")                                           

    try:
       exec(a)     
    except Exception as e:
       err_text = traceback.format_exc()
       print(err_text)
       

app = App(root)

do_run()    # вызов функции

root.mainloop()

Просто вызвать функцию не получается. Можете подсказать как именно её нужно вызвать?


Ответы (1 шт):

Автор решения: Arteman

Просто нужно вызвать функцию через класс в котором она находиться:

from tkinter import *
import traceback
from tkinter import *
import logging
from threading import Thread

root=Tk()

text=Text(root)                                                                                 
text.pack(fill=BOTH)

class StdoutDirector(object):
    print(object)
    def __init__(self, text_area):
        self.text_area = text_area

    def write(self, msg):                               
        self.text_area.insert(END, msg)

class App(Frame):
    def __init__(self, master):
        self.master = master
        Frame.__init__(self, master, relief=SUNKEN, bd=2)
        self.start()

    def start(self):
        self.master.title("Test")
        self.submit = Button(self.master, text='Run', command=self.do_run, fg="red")
        self.submit.pack(side=TOP)
  
    
        self.text_area = Text(self.master, height=10, bg='black',fg="white")
        self.text_area.pack(side=BOTTOM,fill=X)

    def do_run(self): # нужно вызвать эту функцию

        a = text.get(1.0, END)
        self.text_area.delete(1.0, END)
        t = Thread(target=print_stuff, args = (a,))                  
        sys.stdout = StdoutDirector(self.text_area)
    
                              
        logger = logging.getLogger()                                   
        console = logging.StreamHandler(stream=sys.stdout)             
        logger.addHandler(console)                                     
        t.start()
    def do():
       do_run(self)


def print_stuff(a):                                                   
    logger = logging.getLogger('print_stuff')      


    print("[Start project]_\n")                                           

    try:
       exec(a)     
    except Exception as e:
       err_text = traceback.format_exc()
       print(err_text)
   

app = App(root)

app.do_run()    # вызов функции

root.mainloop()
→ Ссылка