Откуда берётся переменная msg?
Есть код:
from tkinter import *
import logging
from threading import Thread
a=('''print("&&&")''')
class StdoutDirector(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=Text(self.master)
self.text.pack(fill=BOTH)
self.text_area = Text(self.master, height=10, bg='black',fg="white")
self.text_area.pack(side=BOTTOM,fill=X)
def do_run(self):
global a
a=self.text.get(1.0, END)
self.text_area.delete(1.0, END)
t = Thread(target=print_stuff)
sys.stdout = StdoutDirector(self.text_area)
# configure the nameless "root" logger to also write # added
# to the redirected sys.stdout # add
logger = logging.getLogger() # added
console = logging.StreamHandler(stream=sys.stdout) # added
logger.addHandler(console) # added
t.start()
def print_stuff():
logger = logging.getLogger('print_stuff') # will inherit "root" logger settings
print("start project")
exec(a)
def main():
logging.basicConfig(level=logging.INFO) # enable logging # added
root = Tk()
app = App(root)
root.mainloop()
if __name__=='__main__':
main()
И мне захотелось узнать откуда берётся переменная msg в начале кода?
class StdoutDirector(object):
def __init__(self, text_area):
self.text_area = text_area
def write(self, msg): #здесь
self.text_area.insert(END, msg) # и здесь
Ответы (2 шт):
Автор решения: Валерий Михайлович
→ Ссылка
Это не переменная это аргумент. Вы сами должны передать его в функцию данного класса при её вызове.
Автор решения: S. Nick
→ Ссылка
я прокомментировал ваш код и заодно убрал глобальную переменную a
from tkinter import *
import logging
from threading import Thread
#a = ('''print("&&&")''')
class StdoutDirector(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=Text(self.master)
self.text.insert(1.0, # +++
'''print('Hello World')\nprint(2 + 3)''' # +++
) # +++
self.text.pack(fill=BOTH)
self.text_area = Text(self.master, height=10, bg='black',fg="white")
self.text_area.pack(side=BOTTOM,fill=X)
def do_run(self):
# global a
a = self.text.get(1.0, END)
self.text_area.delete(1.0, END)
t = Thread(target=print_stuff, args = (a,)) # +++ , args = (a,)
sys.stdout = StdoutDirector(self.text_area)
# configure the nameless "root" logger to also write
# to the redirected sys.stdout
logger = logging.getLogger()
console = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(console)
t.start()
def print_stuff(a): # +++ (a)
logger = logging.getLogger('print_stuff')
# откуда берётся переменная msg в начале кода?
print("start project") # отсюда ===============>
# откуда берётся переменная msg в начале кода?
exec(a) # и отсюда ===============>
def main():
logging.basicConfig(level=logging.INFO)
root = Tk()
app = App(root)
root.mainloop()
if __name__=='__main__':
main()
