Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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()
like image 596
AlexDear Avatar asked May 13 '15 18:05

AlexDear


People also ask

What is window Mainloop () for?

window. mainloop() tells Python to run the Tkinter event loop. This method listens for events, such as button clicks or keypresses, and blocks any code that comes after it from running until you close the window where you called the method.

What does the geometry method of the tkinter window object do?

Tkinter provides many methods; one of them is the geometry() method. This method is used to set the dimensions of the Tkinter window and is used to set the position of the main window on the user's desktop.


1 Answers

Have a look at this post.

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:

enter image description here

like image 83
jcoppens Avatar answered Sep 21 '22 11:09

jcoppens