当前位置: 首页 > 知识库问答 >
问题:

需要文本/按钮输入pyplay[复制]

莘欣怿
2023-03-14

我现在所需要的就是在pygames中输入的基本文本字段和按钮。一个文本字段作为一些简单的结构,我可以读入变量,一个按钮调用函数。

首先,我浏览了一下,发现在pygames中创建文本字段并不是一个简单的过程。最终,通过拼凑这堵代码墙,我成为了一个有点破碎的文本字段的骄傲之父。然后我研究了一下按钮,恐怖地发现实现它们更加复杂。

当然PyGame有某种按钮模块内置的权利?不。

打扰一下我并不是只为一个按钮编写一个完整的程序,我只是需要一个界面来进行更深入的模拟。这就是全部。

然后我研究了Tkinter,它有非常容易理解的GUI输入命令。但不,那也不是命中注定的。

我不相信你能把tkinter嵌入pyplay.

于是我尝试了PGU,但发现它缺少任何直接的例子来说明如何实际使用它来满足我的需要(简单的文本字段和按钮)。当我试图寻找一个,我发现了这一块智慧。

Pygame有什么好的、现代的小部件工具包吗?没有。每年都有人制作一个新的Pygame UI库,然后在几个版本后放弃它

如果这是真的,那么人们应该如何用这种语言来完成任何事情呢?pygame环境中简单文本字段和简单按钮的最佳实践是什么?

共有1个答案

汲永嘉
2023-03-14

是的-pygame是赤裸裸的“我们控制像素”-已经存在了很多时间,而且它本身看起来已经被抛弃了很多时间(例如,就在2016年末,它将在Python 3上安装clean)。所以,与此同时,皮加梅看起来被遗弃了,人们搬走了。

目前,您必须从这里找到一个可用的工具包:

https://www.pygame.org/wiki/gui

如你所知,这里列出的PGU工具包似乎相当完整——关于如何构建简单的小部件来与现有Pyplay代码库交互的条形图示例。所有的例子都假设一个人想要一个用于表单填充的独立图形用户界面应用程序,我同意这是非常不合适的:如果一个人想要这种应用程序,只需使用Tkiner、Qt或创建一个网络应用程序。

然而,事实证明,在现有的pyplay窗口中使用独立的小部件非常简单。尽管所有的库示例调用. run方法,这是扰流板部分,因为当你调用run时,PGU应用程序就接管了,除了回调之外,没有办法运行你的代码。然而,run方法本身由一个非常简单的无限循环组成,调用应用的循环方法。你只需要调用app.loop在你自己pyplay循环的所有帧中,让小部件工作。

它会吞下pyplay事件,但是-如果你想在显示小部件时处理事件,你应该将所有事件分派到app.event并调用app.update而不是调用<-plhd--2/>.当你在https://github.com/parogers/pgu/blob/master/pgu/gui/app.py查看应用程序类的源代码时,这是微不足道的

因此,使用文本输入的完整示例可以是:

import pygame
from pgu import gui

SIZE = W, H = 800, 600


def bouncing_rect(screen):
    surf = pygame.Surface((50, 50))
    rect = surf.get_rect()
    surf.fill((255, 0, 0))
    vx, vy = 10, 10
    while True:
        screen.blit(surf, rect)
        new_surface = yield rect
        if new_surface:
            surf = new_surface
            rect.width = surf.get_width()
            rect.height = surf.get_height()
        rect.x += vx
        rect.y += vy

        if rect.right > W or rect.left < 0:
            vx = -vx
            rect.x += vx * 2
        if rect.bottom > H or rect.top < 0:
            vy = -vy
            rect.y += vy * 2

def main():
    screen = pygame.display.set_mode((SIZE))
    app = gui.Desktop()
    txt = gui.Input()
    app.init(widget=txt, screen=screen, area=pygame.Rect(50, 50, 200,25))
    bouncing = bouncing_rect(screen)
    previous_value = ""
    font = pygame.font.SysFont(name="Sans", size=30)

    while True:
        screen.fill((0,0,0))
        rect = next(bouncing)
        app.loop()
        if txt.value != previous_value:
            previous_value = txt.value
            rect = bouncing.send(font.render(txt.value, True, (255, 255, 0)))
        pygame.display.update([rect])
        app.repaint()
        pygame.display.flip()
        pygame.time.delay(30)

try:
    main()
finally:
    pygame.quit()

(我只是使用“send”方法将反弹对象作为生成器函数,因为这种模式的示例很少,但它可能是一个相同的类——如果它是一个普通的pygame.Sprite子类,我只会调用“update”而不是使用next/send。)

 类似资料:
  • 我试图在Pygame中使用制作按钮。我从红色的退出按钮开始,检查按钮的边界框内是否有单击。

  • 我有一个单选按钮和一个文本字段。我希望文本字段是必需的,只有当单选按钮是勾选。 因此,只有选择createNewCollection时,collectionName才是必需的。

  • 当文本输入为空时,我需要将按钮设置为灰色,一旦所有字段都已填写,请将其更改为蓝色。 login.tsx 从'React'导入React,{useState};从'react native'导入{View、Text、TextInput、TouchableOpacity};从'../../../infrastructure/components/buttons/button-outline prima

  • 在我试图制作的一个程序中,有三个文本字段和几个按钮(每个按钮代表一个数字)。我正在尝试获取它,这样你就可以通过点击按钮(而不是键盘)来打字了。到目前为止,我得到了这个: 在搜索互联网后,我发现了以下代码: 唯一的问题是,我不知道如何使用我找到的代码(我找到的代码是第二个块)。 我从哪里得到密码的。

  • 我创建了一个自定义输入法,只是键盘不是一个完整的带有editText的IME,但由于某些原因,我的“回车”按钮的性能与内置键盘不同。在某些应用程序上,例如Facebook的应用程序,在“密码”字段后面有一个“登录”按钮或类似的按钮。当我使用内置键盘输入密码并按下“回车”按钮时,它会开始登录过程,但我的键盘不会这样做。我尝试使用以下方式以不同方式发送关键事件: ic.send关键事件(新的关键事件。

  • 我的问题得到了回答,我的问题得到了解决。我已经更新了这个线程与我的最终解决方案 我正在做这个学校作业(测验程序),我们最初只需要做一个纯粹的基于文本的控制台游戏,但我想挑战自己,试着用JavaFX创建它,我们刚刚开始学习。 这是一个基于回合的问答游戏,玩家将被呈现一个问题,要求玩家通过两个按钮(对或错按钮)回答对/错 游戏流程: 我正在运行一个for循环,只要我的ArrayList中还有问题,这个