【问题标题】:PysimpleGUI - simple animationPysimpleGUI - 简单的动画
【发布时间】:2019-01-11 15:08:11
【问题描述】:

感谢您阅读本文。

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

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

显示功能包含:

graph.DrawCircle((i,j)5line_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)    

【问题讨论】:

    标签: python pysimplegui


    【解决方案1】:

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

    【讨论】:

    • 与其编写 time.sleep(1),不如编写 window.Read(timeout=1000)。这将导致您的延迟发生在 GUI 内部,从而使您的 GUI 更具响应性,并且仍然延迟适当的时间。
    • 谢谢。 timeout = 1000 在这种情况下会给出不稳定的结果。这只是一些简单的代码来说明问题。我最终得到的代码是康威的人生游戏。
    • 比起使用 Canvas 元素和使用 tkinter 调用来绘制圆圈,使用 Graph 元素然后调用 Graph 的 DrawCircle 方法会更容易和更干净。这样您就没有任何直接的 tkinter 交互,并且您在屏幕上获得了相同的结果。
    • 谢谢 MikeyB,这是我在康威生命密码游戏中使用的。
    • 来自文档:“除非您是实时应用程序并且您知道自己在做什么,否则不应使用零超时。零值将消耗 100%运行代码的 CPU 内核。" 强调不是我的。
    【解决方案2】:

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

    window.Refresh()
    

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

    刷新() 使对窗口的更改显示在屏幕上。 通常不需要,除非立即需要更改或如果 需要一段时间才能再次调用 Read。

    【讨论】:

      猜你喜欢
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多