从 Python Arcade 库中的用户读取文本
Reading text from user in Python Arcade library
PythonArcade 库中有没有一种方法可以从用户那里读取文本(使用文本框矩形或弹出窗口等)?无需读取每个键并对其进行解释(如果系统语言不是英语,则将其翻译成其他字符)。
如果不是,是否有内置方法来检查按下的键的正确字符是什么(取决于系统语言和 Caps Lock 状态等)?
我只找到了写文本的方法,但没有找到阅读它们的方法。
我在 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()
在大多数教程中,Python Arcade
库 仅实现了基本的 key-event handling,例如 on_key_press
和 on_key_release
.
UI 文本组件 I/O
但是,Python Arcade 库有 GUI 个组件作为主要 feature differences when compared to PyGame。
在文档中搜索 input
时,我们可以找到 class
An input field the user can type text into.
这似乎是 自版本 2.6.0 以来(参见发行说明)。
注意: 当前有一个未解决的问题 #1059: UIInputText() not working。 (可以用 arcade-2.6.7
重现;但通过将文本传递给构造函数来使其工作,如 UIInputText(text='hello')
)。
示例演示 text-input
我从问题 #1059 附带的 sample-code 改编而来。
添加了一些 event-handling,如 Arcade Library 文档中所示:FlatButton example.
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()
另见
- 真实 Python:街机:Python 游戏框架入门,第 Keyboard Input
部分
- Maic 的 GitHub 存储库中针对 PyGame 的 GUI 个项目列表:eruvanos/arcade_gui
PythonArcade 库中有没有一种方法可以从用户那里读取文本(使用文本框矩形或弹出窗口等)?无需读取每个键并对其进行解释(如果系统语言不是英语,则将其翻译成其他字符)。
如果不是,是否有内置方法来检查按下的键的正确字符是什么(取决于系统语言和 Caps Lock 状态等)?
我只找到了写文本的方法,但没有找到阅读它们的方法。
我在 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()
在大多数教程中,Python Arcade
库 仅实现了基本的 key-event handling,例如 on_key_press
和 on_key_release
.
UI 文本组件 I/O
但是,Python Arcade 库有 GUI 个组件作为主要 feature differences when compared to PyGame。
在文档中搜索 input
时,我们可以找到 class
An input field the user can type text into.
这似乎是 自版本 2.6.0 以来(参见发行说明)。
注意: 当前有一个未解决的问题 #1059: UIInputText() not working。 (可以用 arcade-2.6.7
重现;但通过将文本传递给构造函数来使其工作,如 UIInputText(text='hello')
)。
示例演示 text-input
我从问题 #1059 附带的 sample-code 改编而来。 添加了一些 event-handling,如 Arcade Library 文档中所示:FlatButton example.
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()
另见
- 真实 Python:街机:Python 游戏框架入门,第 Keyboard Input 部分
- Maic 的 GitHub 存储库中针对 PyGame 的 GUI 个项目列表:eruvanos/arcade_gui