the_novice
the_novice

Reputation: 21

PysimpleGUI - simple animation

Thank you for reading this.

I'm working on a simple animation that is based on one of two examples from the PysimpleGUI cookbook. The attached code, of course, it is not doing anything. I've looked through many examples trying to figure out how to update the canvas but without success.

My first attempt was based on the sine wave plot example. I have an endless while loop and a display function. The display on the graph area shows the first iteration through the loop but is never updated after that.

The display function contains:

graph.DrawCircle((i,j), 5, line_color='black', etc

A second related question, should I be using the canvas or the graph method (as in the sine wave plot example), or doesn't it matter?

I don't want to overwhelm the reader with too much code. If I can get the following to work then I may have a good chance with the real code.

import PySimpleGUI as sg
import time

layout = [      
    [sg.Canvas(size=(100, 100), background_color='red', key= 'canvas')],      
    [sg.T('Change circle color to:'), sg.Button('Red'), sg.Button('Blue')]      
    ]

window = sg.Window('Canvas test')      
window.Layout(layout)      
window.Finalize()

canvas = window.FindElement('canvas')      
cir = canvas.TKCanvas.create_oval(50, 50, 100, 100)

while True:      
    event, values = window.Read()
    '''
    if event is None:      
        break      
    if event == 'Blue':      
        canvas.TKCanvas.itemconfig(cir, fill="Blue")      
    elif event == 'Red':      
        canvas.TKCanvas.itemconfig(cir, fill="Red")

    '''

# this is the part that I need to sort out

    for i in range(10):
        if i % 2 == 0:
            canvas.TKCanvas.itemconfig(cir, fill="Blue")

        else:
            canvas.TKCanvas.itemconfig(cir, fill="Red")

        time.sleep(1)    

Upvotes: 1

Views: 6053

Answers (2)

the_novice
the_novice

Reputation: 21

I discovered the answer and that is, window.Read(timeout = 0).

Upvotes: 1

Mike from PSG
Mike from PSG

Reputation: 5754

In order for changes to show up in a window after making changes, you much either call Read or Refresh. I think all you need to do is down in your bottom loop, add the line:

window.Refresh()

From the docs at http://www.PySimpleGUI.org:

Refresh() Cause changes to the window to be displayed on the screen. Normally not needed unless the changes are immediately required or if it's going to be a while before another call to Read.

Upvotes: 0

Related Questions