0

Python Arcade 库中有没有办法从用户那里读取文本(使用文本框矩形或弹出窗口等)?无需阅读每个键并对其进行解释(如果系统语言不是英语,则翻译为其他字符)。

如果没有,是否有内置方法来检查按下的键的正确字符是什么(取决于系统语言和大写锁定状态等)?

我找到了写文本的方法,但没有找到阅读它们的方法。

4

2 回答 2

0

在大多数教程中,PythonArcade仅实现了基本的键事件处理,例如on_key_presson_key_release.

文本 I/O 的 UI 组件

但是,与 PyGame 相比,Python Arcade Library 具有 GUI 组件作为主要功能差异之一。

在搜索文档时,input我们可以找到一个类

arcade.gui.UIInputText

用户可以在其中输入文本的输入字段。

这似乎是从 2.6.0 版开始(参见发行说明)。

注意:目前有一个未解决的问题#1059: UIInputText() not working。(可以用 ; 重现,arcade-2.6.7但通过将文本传递给构造函数来使其工作,如UIInputText(text='hello'))。

演示文本输入的示例

我从附加到问题 #1059的示例代码中对其进行了修改。添加了一些事件处理,如 Arcade 库的文档所示:FlatButton 示例

import arcade
import arcade.gui as gui

# --- Method 1 for handling click events,
# Create a child class.
class QuitButton(arcade.gui.UIFlatButton):
    def on_click(self, event: arcade.gui.UIOnClickEvent):
        arcade.exit()

class MyWindow(arcade.Window):
    def __init__(self):
        super().__init__(400, 300, "UI Example", resizable=True)
        self.manager = gui.UIManager()
        self.manager.enable()

        arcade.set_background_color(arcade.color.BEIGE)
        
        # Create a text label
        self.label = arcade.gui.UILabel(
            text="look here for change",
            text_color=arcade.color.DARK_RED,
            width=350,
            height=40,
            font_size=24,
            font_name="Kenney Future")

        # Create an text input field
        self.input_field = gui.UIInputText(
          color=arcade.color.DARK_BLUE_GRAY,
          font_size=24,
          width=200,
          text='Hello ..')

        # Create a button
        submit_button = gui.UIFlatButton(
          color=arcade.color.DARK_BLUE_GRAY,
          text='Submit')
        # --- Method 2 for handling click events,
        # assign self.on_click_start as callback
        submit_button.on_click = self.on_click 
        
        self.v_box = gui.UIBoxLayout()
        self.v_box.add(self.label.with_space_around(bottom=0))
        self.v_box.add(self.input_field)
        self.v_box.add(submit_button)
        self.v_box.add(QuitButton(text="Quit"))
        
        self.manager.add(
            arcade.gui.UIAnchorWidget(
                anchor_x="center_x",
                anchor_y="center_y",
                child=self.v_box)
        )


    def update_text(self):
        print(f"updating the label with input text '{self.input_field.text}'")
        self.label.text = self.input_field.text    

    def on_click(self, event):
        print(f"click-event caught: {event}")
        self.update_text()

        
    def on_draw(self):
        arcade.start_render()
        self.manager.draw()


window = MyWindow()
arcade.run()

也可以看看

于 2022-02-17T20:00:45.257 回答
0

我在 Arcade 中看不到这样的功能。

唯一的方法是建立自己的。简单的例子:

import arcade

class Game(arcade.Window):
    def __init__(self):
        super().__init__(400, 300)
        self.text = ''

    def on_draw(self):
        arcade.start_render()
        arcade.draw_text(self.text, 200, 150, arcade.color.GREEN, 24, anchor_x='center')

    def on_key_press(self, key, key_modifiers):
        self.text += chr(key)

Game()
arcade.run()

在此处输入图像描述

于 2022-02-17T10:11:17.370 回答