i-haidar
i-haidar

Reputation: 53

Python - Printing to GUI instead of terminal

Very new to Python here, and I'm trying to create a GUI app that returns a random recipe. Currently the print happens at the terminal, and I'd like it to print in the GUI instead.

from tkinter import *
import os
import random



root = tk.Tk()

def printRecipes():
    recipes = [
        "Tom Yum Soup",

        "Carnitas",

        "General Tso's Chicken"
    ]
    print(random.choice(recipes))


canvas = tk.Canvas(root, height=600, width=700, bg="#A8D1BB")
canvas.pack()

magic = tk.Button(root, text="Print", padx=10, pady=5, fg="white", bg="black", command=printRecipes)
magic.pack()

root.mainloop()

This doesn't work, as most of you already know. I've read that I need to use a label or text for it, but the example I've found all involved static print statements like

label = Label(root,text="Recipe")
    label.pack

Upvotes: 0

Views: 1438

Answers (2)

user15801675
user15801675

Reputation:

To "print" a value to a GUI Window, a Label is used. .config() is a useful function. It is used to configure the provided widget.

Below magic.pack(), add this code. Notice that there is no text parameter. We will use that later.

label1=Label(root,pady=10,font=("arial",15))
label1.pack()

Next, in the function, where you had print(random.choice(recipes)), we will add:

label1.config(text=random.choice(recipes))

Notice that we used .config() and the text parameter. We configured the label, and added some text to it.

Upvotes: 1

Neb
Neb

Reputation: 2280

You need a tk.StringVar for this, i.e. a variable which you can change and the label can read from:

label_str = tk.StringVar(value="Some text")
label = tk.Label(root, textvariable=label_str)

Then, to update the value of this label and show it on the GUI:

label_str.set("New text")
label.update()

Upvotes: 0

Related Questions