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

时间:2019-10-10 21:17:35

标签: python tkinter io stdout stringio

我制作了一个python脚本,该脚本具有许多打印语句来显示程序的工作,而不仅仅是将其放在那儿,并且python脚本可以正常工作,现在我正在使用tkinter创建前端。 我用来发送打印语句以返回它们的东西是这样的:

log warn: org.apache.logging.log4j.status.StatusLogger - No Root logger was configured, creating default ERROR-level Root logger with Console appender
No Root logger was configured, creating default ERROR-level Root logger with Console appender

我的计划是设置一个tkinter框架,在其中放置标签并将文本变量设置为脚本中的函数。到目前为止,我的tkinter页面脚本看起来像这样:

test.py
def PrintX():
    X = [1,2,3,4,5]
    for x in X:
        print(x)

但是什么都没有显示,但是当我按下按钮时,我得到class TradingBotapp(tk.Tk): def __init__(self,*args,**kwargs): tk.Tk.__init__(self,*args,**kwargs) container = tk.Frame(self) container.pack(side='top',fill='both',expand= True) container.grid_rowconfigure(0,weight = 1) container.grid_columnconfigure(0,weight = 1) self.frames = {} for F in (InitalSetup): frame = F(container,self) self.frames[F] = frame frame.grid(row=0,column=0,sticky='nsew') self.show_frame(InitalSetup) def show_frame(self,cont): frame = self.frames[cont] frame.tkraise() class InitalSetup(tk.Frame): def __init__(self,parent,controller): tk.Frame.__init__(self,parent) label = tk.Label(self, text='Setup', font = LARGE_FONT).pack() Frame = tk.Frame(self,width=768,height=576).pack() lbl = tk.Message(Frame, text='').pack() button1 = ttk.Button(self, text='Start Setup',command=lambda:callback2(lbl)).pack() def callback2(object): old_stdout = sys.stdout sys.stdout = StdoutRedirectorLabel(lbl) setup() #lbl['text'] = sys.stdout.result.strip() sys.stdout = old_stdout class StdoutRedirectorLabel(object): def __init__(self,widget): self.widget = widget self.widget['text'] = '' def write(self, text): self.widget['text'] += text app = TradingBotapp() app.mainloop() 的帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

问题在于lbl是同时设置和打包的。 出了什么问题:lbl = tk.Label(Frame, text='').pack() 要解决此问题,我必须改为:

lbl = tk.Label(Frame, text='') 
lbl.pack()

但是它无法按照我想要的方式工作,所以我不得不寻找另一种方式