PysimpleGUI-简单的动画

时间:2019-01-10 03:44:21

标签: python pysimplegui

谢谢阅读。

我正在基于PysimpleGUI食谱中的两个示例之一制作一个简单的动画。附带的代码当然没有做任何事情。我浏览了许多示例,试图弄清楚如何更新画布,但没有成功。

我的第一次尝试是基于正弦波图示例。我有一个无尽的while循环和显示功能。图形区域上的显示显示了循环中的第一次迭代,但此后再也不会更新。

显示功能包含:

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

第二个相关问题,我应该使用canvas还是graph方法(如正弦波图示例中的那样),还是没关系?

我不想给读者太多代码。如果我可以完成以下工作,那么我可能会获得真正的代码。

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)    

2 个答案:

答案 0 :(得分:0)

为了使更改在更改后显示在窗口中,您可以调用“读取”或“刷新”。我认为您需要做的只是在底部循环中,添加以下行:

include: ../shared/analysis_options.yaml

摘自http://www.PySimpleGUI.org上的文档:

  

刷新()   导致更改要在屏幕上显示的窗口。   通常不需要,除非立即进行更改或   再过一会儿Read就需要一段时间了。

答案 1 :(得分:0)

我找到了答案,那就是window.Read(timeout = 0)。