1

谢谢您阅读此篇。

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

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

显示功能包含:

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

第二个相关问题,我应该使用画布还是图形方法(如在正弦波图示例中),还是没关系?

我不想用太多代码让读者不知所措。如果我能让以下工作正常工作,那么我可能会有很好的机会使用真正的代码。

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)    
4

2 回答 2

1

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

于 2019-01-11T07:08:11.573 回答
0

为了在进行更改后在窗口中显示更改,您可以调用 Read 或 Refresh。我认为您需要做的就是在底部循环中添加以下行:

window.Refresh()

来自http://www.PySimpleGUI.org的文档:

Refresh() 导致对要显示在屏幕上的窗口的更改。通常不需要更改,除非立即需要更改,或者在再次调用 Read 之前需要一段时间。

于 2019-01-11T01:10:48.717 回答