Is there a way of putting the Python Shell output in a tkinter window?

Is there a way of putting the Python Shell output in a tkinter window?

  • I was wondering if it is possible (and if so, how) to have the Python Shell output and input inside a tkinter window I have made. I searched on google but I can't seem to find anything. If possible, is there a short version that a beginner could understand. (All the websites I have tried I just could not understand.) Here is my code that I have got: from tkinter import * def Exit(): print() def newClassResults(): #assigns variable to an input so it can be reffered to later amount = int(input("How many people would you like to add? ")) #starts for loop for counter in range(amount): #assigns inputto a variable called 'newName' newName = input("\nEnter the new student's name: ") #assigns input to a variable called 'newScore' newScore = int(input("Enter the new student's score: ")) #adds new results to the list below students_and_score.append((newName,newScore)) score.append(newScore) def saveResults(): #imports time module so that the program can pause for a certain amount of time import time print("\nSaving...") import random, decimal time1 = decimal.Decimal(random.randrange(1,10))/10 time.sleep(time1) print("\nStudents' names saved") print("Students' scores saved") def sortResults(): #imports operator module import operator #imports time module import time #sorts results in acsending order students_and_score.sort(key=operator.itemgetter(1)) #prints in ascending order print("\nSorting Results...") import random, decimal time1 = decimal.Decimal(random.randrange(1,10))/10 time.sleep(time1) print(students_and_score) def percentageCalc(): #assigns input to variable called 'number' number = int(input("\nEnter minimum mark: ")) #creates variable called 'size' size = len(score) index = 0 for counter in range(size): if score[index] > number: higher.append(score[index]) index = index + 1 higherLength = len(higher) #calculates percentage of people with score over amount entered finished = higherLength / size finished = finished * 100 #rounds percentage finished = round(finished) #creates space between line print("\n") print(finished,"% of your students got over",number,"marks") def printResults(): #starts for loop for pair in students_and_score: #creates space between line print("\n") #changes layout of list so it is more readable print(pair[0],pair[1]) #assigns list to a variable students_and_score = [("Imelda Thomas",74),("Craig Parr",90),("Eric Salisbury",58),("Laurence Mann",35),("Bill Walford",82),("David Haroald",27),("Pamela Langley",43),("Sarah Boat",39),("Rachel Matthews",62),("Michaela Cunningham",69)] score = [74,90,58,35,82,27,43,39,62,69] higher = [] window = Tk() #sets background colour window.configure(background="white") #assigns title window.title("Menu") #sets the size of window window.geometry("300x300") window.wm_iconbitmap('favicon.ico') menu = Menu(window) subMenu = Menu(menu) menu.add_cascade(label="File", menu=subMenu) subMenu.add_command(label="Exit", command=Exit) subMenu = Menu(menu) menu.add_cascade(label="Edit", menu=subMenu) subMenu.add_command(label="Enter New Class Results", command=newClassResults) subMenu.add_separator() subMenu.add_command(label="Save Results", command=saveResults) subMenu.add_command(label="Sort Results", command=sortResults) subMenu.add_command(label="Print Results", command=printResults) subMenu.add_separator() subMenu.add_command(label="Calculate Percentage", command=percentageCalc) #Finishes off window.config(menu=menu) window.mainloop()

  • Answer:

    Have a look at http://stackoverflow.com/questions/7253448/how-to-embed-a-terminal-in-a-tkinter-application. The author inserts a terminal emulator in a tkinter window. I've modified the program, inserting the command to start python in the tkinter window: #!/usr/bin/python from Tkinter import * import os root = Tk() termf = Frame(root, width = 400, height = 200) termf.pack(fill=BOTH, expand=YES) wid = termf.winfo_id() os.system('xterm -into %d -geometry 80x20 -sb -e python &' % wid) root.mainloop() This might not work in Windows though, as there is no xterm. This is a screenshot of the terminal working, and I packed a button in the same window, just to show the terminal is really in the frame:

AlexDear at Stack Overflow Visit the source

Was this solution helpful to you?

Other answers

You could always try to https://docs.python.org/2/library/functions.html#eval(string), capture the output and print it to some textbox.

Josep Valls

Just Added Q & A:

Find solution

For every problem there is a solution! Proved by Solucija.

  • Got an issue and looking for advice?

  • Ask Solucija to search every corner of the Web for help.

  • Get workable solutions and helpful tips in a moment.

Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.