我的基本程序从脚本GUI.py导入了它的GUI界面。
old_stdout = sys.stdout
root = Tk.Tk()
root.title('Coursera-dl')
root.geometry("345x230")
app = GUI.Interface(root)
app.mainloop()
if app.button_press() == True and app.return_data():
data = app.return_data()
main(data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7],data[8])
sys.stdout = old_stdout
在我的GUI.py中:
class Interface(ttk.Frame):
def __init__(self,parent=None):
ttk.Frame.__init__(self,parent)
self.parent = parent
self.New_Window()
def New_Window(self):
self.newWindow = Tk.Toplevel(self.parent)
self.app = CoreGUI(self.newWindow)
class StdoutRedirector(object):
def __init__(self,text_widget):
self.text_space = text_widget
def write(self,string):
self.text_space.insert('end', string)
self.text_space.see('end')
class CoreGUI(object):
def __init__(self,parent):
self.parent = parent
self.InitUI()
def InitUI(self):
self.text_box = Tk.Text(self.parent, wrap='word', height = 11, width=50)
self.text_box.grid(column=0, row=0, columnspan = 2, sticky='NSWE', padx=5, pady=5)
sys.stdout = StdoutRedirector(self.text_box)
但是它的作用是打开两个窗口,第一个窗口 (顶层 窗口 ) 按预期工作,第二个窗口 处于空闲状态 , 这是期望的,直到我单击某个按钮 ,该
按钮 在连续按下后打印数据,并且打印的数据应出现在第二个窗口的文本小部件中, 但是
不会发生,程序也没有响应,当我关闭“顶层”窗口时,会出现错误消息
“ TclError:无效的命令名称”“ .33328904.33329104”“”
那么,如何在Text Widget中而不是在控制台中打印数据?
为了帮助您解决这个问题,我制作了一个脚本将stdout重定向到Tkinter
Text小部件,请在此处查看它的作用:-)
问题在于,当您调用时app.mainloop()
,线程正忙于执行Tkinter主循环,因此直到退出循环之前,该语句之前的语句都不会执行。但是一旦退出mainloop,您将尝试使用Text小部件,但该小部件已被销毁。
我建议您将调用移至main
Tkinter小部件的回调(我想您已经在尝试使用了app.button_press()
),因此Text对象可用于显示文本。
class CoreGUI(object):
def __init__(self,parent):
self.parent = parent
self.InitUI()
button = Button(self.parent, text="Start", command=self.main)
button.grid(column=0, row=1, columnspan=2)
def main(self):
print('whatever')
def InitUI(self):
self.text_box = Text(self.parent, wrap='word', height = 11, width=50)
self.text_box.grid(column=0, row=0, columnspan = 2, sticky='NSWE', padx=5, pady=5)
sys.stdout = StdoutRedirector(self.text_box)
root = Tk()
gui = CoreGUI(root)
root.mainloop()
问题内容: 在bash中,调用将在stdout上显示该命令的任何输出。 调用会将该命令的任何输出重定向到指定的文件(在本例中为“输出”)。 有没有一种方法可以将输出重定向到文件 并 在stdout上显示? 问题答案: 您想要的命令名为 : 例如,如果您只关心标准输出: 如果要包括stderr,请执行以下操作: 将通道2(stderr /标准错误)重定向到通道1(stdout /标准输出),以便将两
问题内容: 我正在尝试将函数的标准输出重定向到tkinter文本小部件。我遇到的问题是,它会将每一行写到一个新窗口中,而不是将所有内容都列出在一个窗口中。该函数扫描目录并列出任何0k文件。如果没有文件为0k,则将其打印出来。因此,问题在于,如果目录中有30个0k文件,它将打开30个窗口,每个窗口只有一行。现在,我知道问题出在哪里。如果您查看我的功能代码,我会告诉您: 我知道,每次os.stat看到
问题内容: 我正在尝试使用Tkinter GUI启动子进程并将其stdout / stderr输出显示到Text小部件。最初,我认为可以通过设置“ sys.stdout = text_widget”轻松将sys.stdout重定向到Text小部件,但似乎不行。出现错误:“文本实例没有属性’flush’”。 我在线检查并得到了一些解决方案,例如使用队列与子进程进行通信。但是,由于我的特殊要求,它们都
问题内容: 我有一个Python程序,它执行一组操作并在STDOUT上打印响应。现在,我正在编写一个GUI,它将调用已经存在的代码,并且我想在GUI中打印相同的内容,而不是STDOUT。我将为此使用文本小部件。我不想修改执行该任务的现有代码(其他一些程序也使用此代码)。 有人可以指出我如何使用此现有任务定义并使用其STDOUT结果并将其插入文本小部件中吗?在主GUI程序中,我想调用此任务定义并将其
问题内容: 我正在从另一个python脚本(A)调用python脚本(B)。 使用subprocess.call,如何将B的标准输出重定向到指定的文件? 我正在使用python 2.6.1。 问题答案: 将文件作为参数传递给:
问题内容: 我正在尝试从主机系统调用docker的mysqldump,以从golang保存mysql dump。它可以与主机mysqldump正常工作,但不能与docker的mysqldump一起工作。 } 我只有非空数据库的 空mysql dump 问题答案: 解决方案是: } 没有“> dbname.sql”