Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >添加每个元素后,Pygame屏幕不会更新

添加每个元素后,Pygame屏幕不会更新
EN

Stack Overflow用户
提问于 2020-01-24 00:05:03
回答 2查看 116关注 0票数 1

我正在尝试为我的简单数独解算器程序添加图形。我希望程序在求解数独棋盘时实时更新显示的数独棋盘(我想我应该在每个正确求解的数字之后调用draw_number函数,然后延迟程序,这样它就会绘制数字,暂停,然后继续求解)。

然而,取而代之的是,程序在冻结时解决了整个问题,然后在完成时立即显示整个解决方案。

下面是一个小规模的示例,展示了我想要做的事情,它说明了这个问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pygame

pygame.init()
window = pygame.display.set_mode((600, 600))

board = [
    [1,2,3],
    [7,5,6],
    [4,9,8],
]    

def draw_number(r, c, num):

    font = pygame.font.Font('freesansbold.ttf', 26)
    text = font.render(str(num), True, (0, 0, 0), (255, 255, 255))

    text_rect = text.get_rect()
    text_rect.center = ((c+1)*48+11, (r+1)*48+11)
    window.blit(text, text_rect)
    print("Drawing " + str(num) + " at " + str(r+1) + ", " + str(c+1))
    pygame.display.update()

run = True
while run:
    for i in board:
        for j in range(0, 3):
            draw_number(board.index(i), j, board[board.index(i)][j])

            pygame.display.update()
            pygame.time.delay(20)
    run = False
    pygame.time.delay(5000)

当我们运行此命令时,简单的3x3网格应该单独绘制,并带有暂停,但它会完成for循环,然后暂停5000ms,然后显示结果一秒钟,然后关闭程序。

我知道我在这里做错了什么,但我还是个新手,不确定正确的方法是什么。

EN

回答 2

Stack Overflow用户

发布于 2020-01-24 00:40:30

问题是,当您执行pygame.time.delay()时,它会冻结整个pygame窗口。为了防止出现这种情况,您需要导入time模块,然后使用time.sleep(秒)而不是pygame.time.delay(),下面是一些代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pygame
import time

然后(跳过不相关的部分):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
run = True
while run:
    for i in board:
        for j in range(0, 3):
            draw_number(board.index(i), j, board[board.index(i)][j])
            time.sleep(5)
票数 1
EN

Stack Overflow用户

发布于 2020-01-24 03:03:24

PyGame对程序使用事件驱动模型。代码不应该调用time.sleep()pygame.time.delay()等,因为它会暂停程序。如果暂停的时间足够长,窗口管理器将认为程序已停止响应。

解决这个问题的一种简单方法是使用pygame.time.get_ticks()对操作计时,它会返回自pygame程序启动以来不断增加的毫秒数。设计你的程序,让它看着时钟来决定下一步要做什么。

假设你只想每3秒执行一次操作。查看开始时间,执行操作,但在3000毫秒过去之前,不要再做任何事情(除了轮询事件和更新屏幕)。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def doTheThing():
    pass  # TODO: some super-interesting function


time_we_did_the_thing = 0           # When did we last do the thing
clock   = pygame.time.Clock()
running = True
while running:
    # check for events
    for event in pygame.event.get():
        if ( event.type == pygame.QUIT ):
            running = False

    # paint the screen
    screen.fill( ( 0, 40, 200 ) )  # bluish

    # Do the thing, but only every 3 seconds
    time_now = pygame.time.get_ticks()
    if ( time_now > time_we_did_the_thing + 3000 ):
        doTheThing()
        time_we_did_the_thing = time_now

    # flush the screen-updates
    pygame.display.flip()
    clock.tick_busy_loop(60)   # max FPS=60

pygame.quit()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59888769

复制
相关文章
MySQL时区问题_docker设置时区
使用mysql-connector-java-8.0.9-rc出现以下异常:
全栈程序员站长
2022/11/17
3.5K0
MySQL时区问题_docker设置时区
mysql时区设置_oracle数据库时区设置
> select curtime(); #或 select now()也可以
全栈程序员站长
2022/11/04
6.2K0
jenkins 时区设置
背景 直接搭建好jenkins没有留意时间这块,执行job的时候发现,执行时间和服务器时间不对,需要设置时区 步骤 找到jenkins的启动配置,centos在: /etc/sysconfig/jenkins 修改如下: JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai" 然后重启jenkins即可 Tips 可参考这个地方:https://wik
千往
2018/01/24
3.4K0
springboot设置时区不起作用_docker设置时区
此时数据库时区、容器时区、springboot时区都是CST,输出的时间还是可能差8小时,这因为Date进行json的时候还存一个时区,而springboot默认json工具是jackson,采用的是UTC时区。需要一下配置。注意:如果项目WebMvcConfig采用的是继承WebMvcConfigurationSupport,而不是实现WebMvcConfigurer接口的话,下面的配置会不生效。
全栈程序员站长
2022/11/09
2.7K0
springboot设置时区不起作用_docker设置时区
Linux下设置时区方法,实现开机自动设置时区
平台: RK3399 系统: ubuntu 18.04 64位 --ARM版本 使用tzselect 命令设置时区。 步骤示例: pi@NanoPC-T4:~$ tzselect Please identify a location so that time zone rules can be set correctly. Please select a continent, ocean, "coord", or "TZ". 1) Africa 2) Americas 3) Antarctica
DS小龙哥
2022/01/12
5.9K0
Linux下设置时区方法,实现开机自动设置时区
Gmail 设置,时区
  我们工作的时候,需要和不同时区的人进行合作。我们需要注意时区问题。如果没有设置好时区,会造成很多不便。
西湖醋鱼
2020/12/30
2K0
Gmail 设置,时区
Postgresql设置时区
查看时区 show time zone 查看时间 select now(); 查看支持的时区列表 select * from pg_timezone_names; 设置成东八区 北京时间 UTC+8 set time zone 'PRC'
geekfly
2022/04/24
1.9K0
MySQL:设置时区
在开发过程中,设置 IDEA 连接数据mysql数据库连接时遇到异常“Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.” 。意思是时区设置的不对。 于是寻找解决方法。
张云飞Vir
2021/06/11
11.1K0
MySQL:设置时区
PHP 时区设置
有时候使用date("Y-m-d h:i:s")时发现时间相差8小时,修改“/etc/php5/apache2/php.ini”:
爱知汇
2020/10/10
2.5K0
Springboot 设置时区问题
本文由 Alone88 创作,采用 知识共享署名4.0 国际许可协议进行许可 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
Alone88
2020/06/11
6.3K3
MySQL数据库时区错误,设置时区
解决方法1: 打开cmd,输入 mysql -uroot -p123456 进入mysql命令模式 然后输入 set global time_zone=‘+8:00’;
啦啦啦啦
2023/02/11
5.7K0
MySQL数据库时区错误,设置时区
Ubuntu设置时区时间
       我们可以通过date来查看当前的时间时区等信息,如果不是CST时区那么可能就和当前的时间不符,我们可以通过下面的命令来设置时区:
Ch_Zaqdt
2020/03/23
2.2K0
jvm linux 时区设置
在接入集团一个平台的时候,发现录制某个接口到测试环境回放,发现接口入参一致,一个start_day 一个end_day,但回放的时候会多调用一次数据库查询,很是奇怪;
千往
2018/08/02
8.3K0
centos在设置时区
[root@localhost ~]# date -R // 查看时区
全栈程序员站长
2022/07/06
1.3K0
Django 时间与时区设置
在Django的配置文件settings.py中,有两个配置参数是跟时间与时区有关的, 分别是TIME_ZONE和USE_TZ
用户5760343
2022/05/14
1.2K0
Linux 时间及时区设置
UTC(Universal Time Coordinated)=GMT(Greenwich Mean Time),Local time 本地时间,
授客
2019/09/12
10.2K0
设置时区定位可以关闭吗_监控时区设置是什么意思
这个时区要设置好,不然会出现时差, 如果你设置serverTimezone=UTC,连接不报错, 但是我们在用java代码插入到数据库时间的时候却出现了问题。 比如在java代码里面插入的时间为:2021-06-24 17:29:56 但是在数据库里面显示的时间却为:2021-06-24 09:29:56 有了8个小时的时差 UTC代表的是全球标准时间 ,但是我们使用的时间是北京时区也就是东八区,领先UTC八个小时。
全栈程序员站长
2022/11/09
1.1K0
Django的时区设置问题
  django默认的时区是UTC,平时是没有什么影响的,但是在需要将时间戳转换成本时区的时间或者是获取当前的本地的localtime的时候就出现了问题。之前程序在测试时是运行在Windows环境,所以即使settings.py中的TIME_ZONE使用默认时区,Django也会根据本机的时区使用当前时区时间。然而程序放到linux运行程序时,Django的时区会使用settings.py中的TIME_ZONE设置的时区,所以这时就出现了问题。再有当我用脚本在linux上测试或者直接进入python环境的时候,运行time.localtime(),显示本机所在时区的当前时间。
py3study
2020/01/20
2.9K0
mysql jdbc url设置时区
设置时区时,添加serverTimezone参数,比如serverTimezone=GMT%2B8(URL 中 %2B表示+号,GMT%2B8即为GMT+8)。
全栈程序员站长
2022/09/09
6.4K0
点击加载更多

相似问题

码头港口80:80 127.0.0.1

42

港口:80和:443

22

80港口码头码头分店

12

Django项目在80港口?

32

Rails项目位于8080港口,nginx位于80港口

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文