首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Pygame PiTFT触摸事件-主循环等待,直到检测到触摸

Pygame是一个用于开发2D游戏和多媒体应用程序的Python库。PiTFT是一款由Adafruit推出的树莓派专用触摸屏。在Pygame中,可以通过PiTFT触摸事件来实现对触摸屏的交互操作。

主循环是游戏或应用程序的核心部分,它负责处理用户输入、更新游戏状态和绘制图形等任务。在Pygame中,主循环通常使用一个while循环来实现。

当需要检测PiTFT触摸事件时,可以在主循环中使用pygame.event.get()函数来获取所有当前发生的事件。然后,可以通过遍历这些事件并判断它们的类型来处理触摸事件。

以下是一个示例代码片段,展示了如何在Pygame中使用PiTFT触摸事件:

代码语言:txt
复制
import pygame
import os

# 初始化Pygame
pygame.init()

# 设置PiTFT触摸屏的环境变量
os.environ["SDL_FBDEV"] = "/dev/fb1"

# 设置屏幕尺寸和背景颜色
screen = pygame.display.set_mode((320, 240))
screen.fill((255, 255, 255))

# 主循环
running = True
while running:
    # 获取当前发生的事件
    for event in pygame.event.get():
        # 判断事件类型
        if event.type == pygame.MOUSEBUTTONDOWN:
            # 处理触摸事件
            touch_pos = pygame.mouse.get_pos()
            print("触摸坐标:", touch_pos)
        elif event.type == pygame.QUIT:
            # 处理退出事件
            running = False

    # 更新屏幕显示
    pygame.display.flip()

# 退出Pygame
pygame.quit()

在上述代码中,我们首先导入了pygame和os模块,并初始化了Pygame。然后,设置了PiTFT触摸屏的环境变量,以便Pygame能够正确地与触摸屏进行交互。

接下来,创建了一个320x240像素大小的屏幕,并设置了白色背景。然后,进入主循环,不断获取当前发生的事件。

在事件处理部分,我们首先判断事件类型是否为MOUSEBUTTONDOWN,即触摸事件。如果是触摸事件,我们使用pygame.mouse.get_pos()函数获取触摸坐标,并进行相应的处理。在本例中,我们只是简单地将触摸坐标打印出来。

如果事件类型为QUIT,即退出事件,我们将running变量设置为False,以退出主循环,从而结束程序运行。

最后,使用pygame.display.flip()函数更新屏幕显示,并在程序结束时调用pygame.quit()函数退出Pygame。

这是一个简单的示例,演示了如何在Pygame中使用PiTFT触摸事件。根据具体需求,你可以在触摸事件处理部分添加更多的逻辑和功能。

腾讯云提供了一系列云计算相关的产品和服务,例如云服务器、云数据库、云存储等。你可以根据具体需求选择适合的产品。更多关于腾讯云的产品和介绍,你可以访问腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

利用状态机编程学习触摸

更高效的使用触摸屏   PENIRQ引脚在没有触摸时都是高电平,只要有触摸就是低电平,直到没有触摸。用中断检测PENIRQ引脚,当产生下降沿中断时就去读取坐标。...当触摸屏有触点按下时,PENIRQ 引脚会输出低电平,直到没有触摸的时候,它才会输出高电平;而且 STM32 的中断只支持边沿触发(上升沿或下降沿),不支持电平触发,在触摸屏上存在类似机械按键的信号抖动...在应用时,本函数需要在循环体里调用,或定时调用(如每隔 10ms调用一次)。...如果在PRESSED状态下检测到PENIRQ变成高电平,就转入RELEASE状态,同时对外输出这个触摸没有被按下。...在消抖以后检测到PENIRQ是低电平或在PRESSED状态检测到PENIRQ是低电平,对外输出TOUCH_PRESSED。

62420

WPF 在触摸线程等待主线程窗口关闭会让主线程和触摸线程相互等待 原理方法一方法二

这个线程会调用 ThreadProc 进入循环直到软件退出 void ThreadProc() { } 在 ThreadProc 里面有两次循环,第一层循环是处理添加或移除 PenContext...等,第二层循环是进入 PENIMC 这个库卡住,直到释放线程锁 _pimcResetHandle 或用户触摸才继续 void ThreadProc() { while (!...object sender, RoutedEventArgs e) { } private FooWindow _fooWindow; } 这时运行代码触摸一下屏幕就会发现窗口的按钮无法点击...在主线程需要等待触摸线程运行移除 PenContext 代码,触摸线程需要等待主线程关闭窗口,这时两个线程就无响应 所有的代码在 github 方法二 在触摸触发的过程中,出现了窗口的关闭,会让主线程卡住...FireEvent 不需要等待_pimcResetHandle就无法到第一层循环,主线程无法等到触摸线程移除 PenContext 主线程卡住 ---- 本文会经常更新,请阅读原文:

1.2K30
  • 童年游戏大回顾:飞机大战

    游戏机制: 飞机移动: 玩家通过键盘或触摸屏控制飞机的移动,可以是上下左右四个方向的移动。 发射子弹: 玩家可以按下特定的键或触摸屏幕来发射子弹,子弹向上飞行,与敌机碰撞时,敌机被击中。...游戏循环: 在游戏循环中,处理事件、更新游戏状态并绘制游戏界面。 事件处理部分检测玩家的键盘输入,并根据按键移动玩家飞机或发射子弹。 敌机和子弹的移动和绘制是在游戏循环中进行的。...() # 游戏循环 running = True while running: # 设置帧率 clock.tick(30) # 处理事件 for event in...= False return # 返回到游戏循环,重启游戏 # 创建精灵组 all_sprites = pygame.sprite.Group() enemies...2, HEIGHT - 50, 5) all_sprites.add(player) # 游戏循环 running = True score = 0 while running: # 事件处理

    45143

    关于“Python”的核心知识点整理大全31

    必须在while循环前面创 建该实例(见1),以免每次循环时都创建一艘飞船。填充背景后,我们调用ship.blitme()将飞 船绘制到屏幕上,确保它出现在背景前面(见2)。...(): """响应按键和鼠标事件""" for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() 这个模块中导入了事件检查循环要使用的...检测到KEYDOWN事件时,我们需要检查按下的是否是特定的键。...在函数check_events()内部,我们在事件循环中添加了一个elif代码块,以便在Pygame测到 KEYDOWN事件时作出响应(见)。...这里之所以可以使用elif代码块,是因为每个事件都只与一个键相关联;如果玩家同时按下了左右箭头键,将检测到 两个不同的事件

    10510

    WPF 插拔触摸设备触摸失效

    获取触摸流程循环用于拿到用户触摸相关。很多的时候,在用户正常使用的流程只是运行初始化流程循环一次,之后在用户触摸的时候就通过获取触摸流程循环拿到值。...本文下面就会使用初始化流程循环指代第一层循环,使用获取触摸流程循环指代第二层循环。 ? 获取触摸流程循环是通过 penimc2_v0400.dll 来拿到触摸收集进程收集到的点。 ?...这里的代码需要简单的介绍 for (;;) { // 无限循环直到发现设备更新 int num;// 表示事件事件是数值 // 707:PenInRange // 708:PenOutOfRange...,如果是因为释放 _pimcResetHandle 就是因为更新了 _workerOperation 从初始化流程循环可以运行 _workerOperation 而不是等待触摸,这个过程在用户插拔触摸屏很有用...是否还记得刚才的 ThreadProc 获取触摸流程循环,在用户没有触摸时,假设只有一个 PenContext 会在 GetPenEvent 等待等待的方法是通过 _pimcResetHandle

    1.7K10

    (译)SDL编程入门(3)事件驱动编程

    //循环标志 bool quit = false; //事件处理程序 SDL_Event e; 在我们的代码中,在SDL被初始化并加载媒体后(如前面教程中提到的),我们声明一个退出标志,以跟踪用户是否已经退出...在这个程序中,我们要让程序等待到用户退出后再关闭。 所以我们要让应用程序在用户还没有退出的时候进行循环。这个在应用程序活动时一直运行的循环称为主循环,有时也称为游戏循环。它是任何游戏应用的核心。...在循环的顶部,我们有我们的事件循环。它的作用是不断处理事件队列,直到它清空。 当你按下一个键、移动鼠标或触摸屏幕时,你就会把事件放到事件队列中。 ?...事件队列将按照事件发生的顺序存储它们,等待你处理它们。当你想知道发生了什么事件以便处理它们时,你可以通过调用SDL_PollEvent[5]对事件队列进行轮询以获得最近的事件。...因此,这段代码所做的就是不断地从事件队列中轮询事件直到它为空。

    95220

    Pygame 第4课】 获取鼠标位置

    最近微信上很火的“打飞机”游戏,通过手指在屏幕上触摸的位置来移动你的飞机。在电脑上,我们没法直接用手操作,但可以用鼠标替代手指。 在电脑游戏里,鼠标是个很好用的输入设备。...所以你需要两个变量来记录返回值: x, y = pygame.mouse.get_pos() 然后,在游戏循环中,把实现准备好的飞机图片画到屏幕上,位置就是(x,y): screen.blit(plane...完整代码: # -*- coding: utf-8 -*- import pygame from sys import exit pygame.init() screen = pygame.display.set_mode...background = pygame.image.load('bg.jpg').convert() plane = pygame.image.load('plane.jpg').convert() #...pygame.quit() exit() screen.blit(background, (0,0)) x, y = pygame.mouse.get_pos()

    5.9K120

    史上最详细的iOS之事件的传递和响应机制-原理篇

    窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件,这也是整个事件处理过程的第一步。 找到合适的视图控件后,就会调用视图控件的touches方法来作具体的事件处理。...2.UIApplication会从事件对列中取出最前面的事件(此处假设为触摸事件A),把事件A传递给应用程序的窗口(keyWindow)。...详述:1.窗口接收到应用程序传递过来的事件后,首先判断自己能否接手触摸事件。...又会重复上面的两个步骤(传递事件给子控件,1.判断子控件能否接受事件,2.点在不在子控件上)    4.如此循环遍历子控件,直到找到最合适的view,如果没有更合适的子控件,那么自己就成为最合适的view...2.UIApplication会从事件队列中取出最前面的事件,把事件传递给应用程序的窗口(keyWindow)。   3.窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件

    11.1K70

    IOS开发系列——UIView专题之五:常用开发技巧篇

    5.1.4hitTest方法以及不规则区域内触摸事件处理方法 5.1.4.1hitTest:withEvent:方法流程 iOS系统检测到手指触摸(Touch)操作时会将其放入当前活动Application...的事件队列,UIApplication会从事件队列中取出触摸事件并传递给key window(当前接收用户事件的窗口)处理,window对象首先会使用hitTest:withEvent:方法寻找此次Touch...操作初始点所在的视图(View),即需要将触摸事件传递给其处理的视图,称之为hit-test view。...UITouch对象有一个view属性,表示此触摸操作初始发生所在的视图,即上面检测到的hit-test view,此属性在UITouch的生命周期不再改变,即使触摸操作后续移动到其他视图之上。...【原】ios的hitTest方法以及不规则区域内触摸事件处理方法 http://www.cnblogs.com/wengzilin/p/4249847.html hitTest:withEvent:

    1.1K20

    【STM32H7教程】第54章 STM32H7的LTDC应用之LCD电阻触摸和电容触摸

    第26-29行,清除触摸中断标志,检测到触摸屏未被按下时,要做清除。   第39-84行,读取X轴ADC数值。   第94-97行,读取Y轴ADC数值。...第33行,用于等待触摸笔释放,当校准完毕1个点后,等待释放时使用。   第35-79行,读取500次X轴和Y轴的ADC数值,每10ms读取1次,每个触摸点的最大读取时间就是5秒。...如果5秒内还没有触摸就会进入到第77行直接退出触摸校准。 第41行检测到有按下的话,会连续读取5次,确保已经按下了,然后标记本次按下得到的ADC数值。...int16_t tpX, tpY; uint8_t ucTouch; /* 触摸事件 */ ucTouch = TOUCH_GetKey(&tpX, &tpY); /* 读取触摸事件...int16_t tpX, tpY; uint8_t ucTouch; /* 触摸事件 */ ucTouch = TOUCH_GetKey(&tpX, &tpY); /* 读取触摸事件

    1.4K30

    WPF 从触摸消息转触摸事件

    在 WPF 程序可能因为一些坑让程序触摸失效,如果此时还可以收到系统的触摸消息,那么可以通过从触摸消息转触摸事件解决程序触摸失效但不适合所有触摸失效程序 在 WPF 的触摸代码写的不是很清真,特别是触摸事件可能出现一些坑...,如WPF 在触摸线程等待主线程窗口关闭会让主线程和触摸线程相互等待 和 WPF 插拔触摸设备触摸失效 等,有时候在开机的过程,如果启动快了,触摸设备还没准备好,刚好在 WPF 初始化的过程 USB 触摸设备才准备好...因为在希沃的设备上主要是触摸屏幕,用户不会有鼠标,如果出现了初始化的过程刚好就是 USB 准备好,那么这个程序将收不到任何触摸事件 在程序启动的时候,可以通过获得触摸精度和触摸点判断当前是否存在触摸设备...Size), TouchAction); } 上面代码没有按照约定,返回输入元素相对的坐标,而是返回屏幕的坐标,所以请小伙伴自己修改代码才能在项目使用,同时因为使用的是屏幕的坐标,所以在窗口触摸的时候...,如果判断当前的触摸点在屏幕之外,那么就不会触发窗口的触摸

    1.2K20

    WPF 高性能笔

    如果需要经过路由事件才收到输入,如果有人在路由事件做了很多需要很长事件的代码,那么等待用户的路由事件就会使用很长的时间。 如果需要等待界面的布局也就是如果主线程卡住了,就需要等待主线程才可以渲染。...这个需要从触摸开始讲。在我的另一篇博客有告诉大家从触摸事件,在 WPF 是通过触摸线程拿到触摸信息。 在触摸线程获取触摸消息的时候,会根据收到的触摸消息转发不同的方法。...因为这个过程是从触摸线程拿到的,而且触摸线程在执行 StylusPlugin 后才执行到路由事件的代码,使用 StylusPlugin 的速度会比路由事件快很多,加上路由事件需要做命中测试,可能用户会在路由事件做很多事件...而 Stylusplugin 只是从触摸线程拿到,完全不需要等用户在路由事件代码。...,从这里获得触摸事件比路由会快,因为这里是 rawStylusInput ,没有处理的事件,可以获得触摸宽度和触摸的元素。

    43030

    WPF 高性能笔

    如果需要经过路由事件才收到输入,如果有人在路由事件做了很多需要很长事件的代码,那么等待用户的路由事件就会使用很长的时间。 如果需要等待界面的布局也就是如果主线程卡住了,就需要等待主线程才可以渲染。...这个需要从触摸开始讲。在我的另一篇博客有告诉大家从触摸事件,在 WPF 是通过触摸线程拿到触摸信息。 在触摸线程获取触摸消息的时候,会根据收到的触摸消息转发不同的方法。...因为这个过程是从触摸线程拿到的,而且触摸线程在执行 StylusPlugin 后才执行到路由事件的代码,使用 StylusPlugin 的速度会比路由事件快很多,加上路由事件需要做命中测试,可能用户会在路由事件做很多事件...而 Stylusplugin 只是从触摸线程拿到,完全不需要等用户在路由事件代码。...,从这里获得触摸事件比路由会快,因为这里是 rawStylusInput ,没有处理的事件,可以获得触摸宽度和触摸的元素。

    75640

    你无法检测到触摸

    但问题是,从来没有人说过一个非触屏设备不能实现触摸接口,或者至少在 DOM 里拥有事件句柄。...Chrome 团队用一次升级“修复”了这个问题,它只在当启动时检测到了可触摸输入设备时才启用触摸接口。 所以我们都没问题了,对吧? 不完全是。 接口的接口 ¶ 对于设备本身,浏览器仍然有相当远的距离。...甚至就算最近,诺基亚的塞班浏览器也不支持触摸事件直到去年 8.2 版本的发布。...没有专门的触摸接口,浏览器仅仅模拟鼠标事件……因而有许多设备和触摸屏不等同,你根本不能用这些检测方法来检测这些设备。...这篇文章很值得一读(如果你原谅他最初声称你可以可靠地检测到触摸屏……)。

    1.9K20

    【STM32H7】第5章 ThreadX GUIX上手之电阻触摸和电容触摸

    第26-29行,清除触摸中断标志,检测到触摸屏未被按下时,要做清除。   第39-84行,读取X轴ADC数值。   第94-97行,读取Y轴ADC数值。...第33行,用于等待触摸笔释放,当校准完毕1个点后,等待释放时使用。   第35-79行,读取500次X轴和Y轴的ADC数值,每10ms读取1次,每个触摸点的最大读取时间就是5秒。...如果5秒内还没有触摸就会进入到第77行直接退出触摸校准。 第41行检测到有按下的话,会连续读取5次,确保已经按下了,然后标记本次按下得到的ADC数值。...int16_t tpX, tpY; uint8_t ucTouch; /* 触摸事件 */ ucTouch = TOUCH_GetKey(&tpX, &tpY); /* 读取触摸事件...int16_t tpX, tpY; uint8_t ucTouch; /* 触摸事件 */ ucTouch = TOUCH_GetKey(&tpX, &tpY); /* 读取触摸事件

    1.1K20

    【STM32F429】第5章 ThreadX GUIX上手之电阻触摸和电容触摸

    第26-29行,清除触摸中断标志,检测到触摸屏未被按下时,要做清除。   第39-84行,读取X轴ADC数值。   第94-97行,读取Y轴ADC数值。...第33行,用于等待触摸笔释放,当校准完毕1个点后,等待释放时使用。   第35-79行,读取500次X轴和Y轴的ADC数值,每10ms读取1次,每个触摸点的最大读取时间就是5秒。...如果5秒内还没有触摸就会进入到第77行直接退出触摸校准。 第41行检测到有按下的话,会连续读取5次,确保已经按下了,然后标记本次按下得到的ADC数值。...int16_t tpX, tpY; uint8_t ucTouch; /* 触摸事件 */ ucTouch = TOUCH_GetKey(&tpX, &tpY); /* 读取触摸事件...int16_t tpX, tpY; uint8_t ucTouch; /* 触摸事件 */ ucTouch = TOUCH_GetKey(&tpX, &tpY); /* 读取触摸事件

    1.3K30

    PyGame 入门专业游戏开发(一)

    游戏程序的基本结构,会包含以下部分: 一个无限循环,我们称之为“循环”。通过用户操作退出了这个循环,游戏程序就关闭了。 一个每秒被调用固定次数的函数,我们称之为“update”函数。...除了程序的运行时的结构,还需要有的两个游戏运行的必要能力: 显示一个可供画图的窗口 检测用户的输入,如键盘按键、鼠标点击等 pygame 提供了这样的能力,因此我们可以编写一个游戏的循环如下(可以保存为...变量控制循环 clock.tick(60) # 等待 60 分之一秒 # 读取用户操作事件 events = pygame.event.get() #...此时可能同时存在多个操作 for event in events: # 循环遍历每个操作事件 if event.type == pygame.QUIT: # 关闭窗口事件被发现...上面的程序中, while running: 这个循环中,如果 running 变成 False 了,就退出循环,游戏就结束了。

    29810
    领券