Python 如何返回控制台输出的字符串值以将其放入Tkinter中的标签中

Python 如何返回控制台输出的字符串值以将其放入Tkinter中的标签中,python,tkinter,io,stdout,stringio,Python,Tkinter,Io,Stdout,Stringio,我制作了一个python脚本,它有很多print语句来显示程序正在做什么,而不仅仅是让它坐在那里,python脚本工作得很好,现在我正在用tkinter创建一个前端。 我过去发送打印语句以返回它们是这样的: test.py def PrintX(): X=[1,2,3,4,5] 对于x中的x: 打印(x) 我的计划是有一个tkinter框架,在其中我放置了一个标签,并将文本变量设置为脚本中的函数。到目前为止,我的tkinter页面脚本如下所示: class TradingBotapp(tk.t

我制作了一个python脚本,它有很多print语句来显示程序正在做什么,而不仅仅是让它坐在那里,python脚本工作得很好,现在我正在用tkinter创建一个前端。 我过去发送打印语句以返回它们是这样的:

test.py
def PrintX():
X=[1,2,3,4,5]
对于x中的x:
打印(x)
我的计划是有一个tkinter框架,在其中我放置了一个标签,并将文本变量设置为脚本中的函数。到目前为止,我的tkinter页面脚本如下所示:

class TradingBotapp(tk.tk):
定义初始化(self,*args,**kwargs):
tk.tk.\uuuuu初始化(self,*args,**kwargs)
容器=tk.框架(自身)
container.pack(side='top',fill='both',expand=True)
container.grid_rowconfigure(0,权重=1)
container.grid\u column配置(0,权重=1)
self.frames={}
对于F英寸(初始设置):
框架=F(容器,自身)
self.frames[F]=帧
frame.grid(行=0,列=0,sticky='nsew')
自我显示框架(初始设置)
def显示画面(自身,续):
帧=自身帧[续]
frame.tkraise()
类初始设置(tk.Frame):
定义初始化(自、父、控制器):
tk.Frame.\uuuu init\uuuuu(自,父)
label=tk.label(self,text='Setup',font=LARGE\u font).pack()
Frame=tk.Frame(self,宽度=768,高度=576).pack()
lbl=tk.Message(框架,文本=“”).pack()
button1=ttk.Button(self,text='Start Setup',command=lambda:callback2(lbl)).pack()
def回调2(对象):
old_stdout=sys.stdout
sys.stdout=StdoutRedirectorLabel(lbl)
设置()
#lbl['text']=sys.stdout.result.strip()
sys.stdout=old\u stdout
类StdoutRedirectorLabel(对象):
定义初始化(自我,小部件):
self.widget=widget
self.widget['text']=''
def写入(自身、文本):
self.widget['text']+=text
app=TradingBotapp()
app.mainloop()
但是什么也没有显示,但是当我按下按钮时,我得到了
self.widget['text']=''

TypeError:“非类型”对象不支持项目分配
非常感谢您的帮助

哈哈。。。你成了经典错误之一的受害者!!(说真的,我以前做过很多次,你并不孤单)我相信你需要在标签创建后用
label1.pack()
打包标签。

问题是
lbl
是同时设置和打包的。 出了什么问题:
lbl=tk.Label(Frame,text='').pack()
为了修复它,我不得不这样做:

lbl=tk.Label(框架,文本=“”)
lbl.pack()

但是它没有按照我想要的方式工作,所以我必须找到另一种方式,我在最后有了它。它在其他页面中对我有效。
label1=tk.Label(Frame,textvariable=PrintX(),font=LARGE\u font).pack()
对不起,我没有看到它在最后。不过,这里有一些东西可以尝试。我注意到您打包了安装标签的框架,但没有打包初始设置。我不知道你在哪里实例化InitalSetup,但试着在那之后放上pack。我在按下button1
button1=tk.button(self,text='Start Setup',command=lambda:self.InitalSetup()).pack()的按钮时运行它。
我得到了它,我不必同时打包和设置它,通过设置它,然后在另一行打包它工作