我制作了一个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()
的帮助将不胜感激
答案 0 :(得分:0)
哈哈...您已成为经典失误之一的受害者! (说真的,我之前已经做过很多次了,您并不孤单。)我相信您需要在创建标签后用label1.pack()
包装标签。
答案 1 :(得分:0)
问题在于lbl
是同时设置和打包的。
出了什么问题:lbl = tk.Label(Frame, text='').pack()
要解决此问题,我必须改为:
lbl = tk.Label(Frame, text='')
lbl.pack()
但是它无法按照我想要的方式工作,所以我不得不寻找另一种方式