My chương trình cơ sở nhập khẩu đó là giao diện GUI từ một kịch bản GUI.pyLàm thế nào để chuyển hướng stdout để Text Widget Tkinter
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
Trong GUI.py tôi:
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)
Nhưng những gì nó làm là nó mở ra hai cửa sổ và cửa sổ đầu tiên (cái toplevel) hoạt động như mong đợi và thứ hai là nhàn rỗi, Đây là những gì được mong đợi cho đến khi tôi bấm vào một nút nhất định mà sau khi nhấn dữ liệu in liên tục và dữ liệu được in sẽ xuất hiện trong tiện ích văn bản của cửa sổ thứ hai tuy nhiên điều này không xảy ra và không có phản hồi từ chương trình và khi tôi đóng cửa sổ Toplevel, thông báo lỗi xuất hiện
"TclError: invalid command name "".33328904.33329104"""
Vậy làm cách nào để in dữ liệu trong Tiện ích văn bản thay vì trong bảng điều khiển?
EDIT:
Inorder để giúp ya'll nếu bạn đang gặp khó khăn với điều này, tôi đã thực hiện một kịch bản để chuyển hướng stdout để Text Widget Tkinter, nhìn thấy nó trong hành động here :-)
Nó có thể giúp bạn tạo [ví dụ ngắn gọn, độc lập, chạy được] (http://sscce.org/) thể hiện sự cố của bạn. Có rất nhiều người dùng lười biếng trên SO ([có nên có] (http://c2.com/cgi/wiki?LazinessImpatienceHubris)), vì vậy bạn càng dễ dàng thực hiện nó để gỡ lỗi chương trình của bạn, càng có nhiều câu trả lời bạn sẽ nhận được . – Kevin