【问题标题】:I'm trying to use pygame and need and interface [duplicate]我正在尝试使用pygame并需要和界面[重复]
【发布时间】:2016-08-27 18:54:12
【问题描述】:

我正在制作一个程序,我想使用 pygame 运行它。关键是我需要一个空间供用户输入数字,并且在屏幕上我需要打印一个数组,它的大小可能会有所不同(总是 3 列,但用户控制行数),但我想要它始终完全显示在屏幕上。我怎样才能做到这两件事?

【问题讨论】:

  • SO 绝对不是你要求别人给你写代码的地方。在 pygame 上查找教程并学习该模块。编写你的代码,如果你遇到问题来这里。不要依赖别人做你需要做的事情:)
  • 使用 GUI 工具包。在大多数平台上,Python 都带有 tkinter 工具包。

标签: python user-interface python-3.x pygame python-3.5


【解决方案1】:

您不能指望人们从头开始编写代码来完成您想要的。如果只是你需要的建议,我可以提供一些。

Pygame 没有引入正式的输入域或输入框。如果你想专门在pygame中实现这样的东西,你必须记录输入keys(键盘输入)。并将输入插入到字符串或列表中,然后自己显示。但是你必须实现你设计的输入框的方法,就像你应该有一个退格的条件,它会删除列表的最后一个元素。 Pygame 没有正式这样做,但你可以写这样的东西。

但是,您需要的似乎是一个 gui。这提供了一种更好的输入方式,制作输入字段,为程序窗口和输入框提供属性,制作按钮等。在这种情况下,如果你改变主意,我建议Wxpython

【讨论】:

    【解决方案2】:

    如果你想自己创建一个非常简单的文本输入框,你可以尝试用 pygame.Rect 定义一个区域,然后检查鼠标是否与 rect 碰撞来选择它并使用.unicode 属性用于将字符附加到可以在屏幕上显示的列表或字符串的键盘事件。

    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            your_input_string += event.unicode
    

    还有一些用于 Pygame 的 GUI 库,例如 SGC,非常易于使用。替代品(在 pygame.org 上)是 Albow、PGU 和 OcempGUI(后者仅适用于 Python 2.7)。

    【讨论】:

      【解决方案3】:

      这可以使用pygame_gui 来完成。文本输入可通过UITextEntryLine 实例获得,而打印数组则可以使用UITextBox 完成。您首先需要像quick start guide 一样设置环境。

      创建一个UITextEntryLine 实例:

      from pygame.rect import Rect
      from pygame_gui.elements.ui_text_entry_line import UITextEntryLine
      text_input = UITextEntryLine(relative_rect=Rect(0, 0, 100, 100), manager=manager)
      

      可以使用set_allowed_characters将输入限制为仅数字:

      text_input.set_allowed_characters('numbers')
      

      向事件队列添加检查允许在按下回车时获取文本输入:

      for event in pygame.event.get():
          if event.type == pygame.USEREVENT:
              if event.user_type == pygame_gui.UI_TEXT_ENTRY_FINISHED:
                  if event.ui_element == text_input:
                      entered_text = text
      

      UITextBox 可以通过将高度设置为 -1 来设置自定义高度:

      from pygame_gui.elements.ui_text_box import UITextBox
      text_box = UITextBox(relative_rect=Rect(0, 0, 100, -1), manager=manager, text='foobar')
      

      【讨论】:

      • 请尽量提供解决问题所需的信息而不需要链接,您的其他答案看起来不错,但如果有一天碰巧被删除,这个答案将几乎无法使用。
      • 啊,好的。我可以看到这将是一个问题。很快就会修复。
      猜你喜欢
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      • 2015-10-29
      • 1970-01-01
      相关资源
      最近更新 更多