基于文字的游戏Kivy-文字未更新

时间:2018-10-20 21:18:47

标签: python kivy python-3.6 kivy-language

我目前正在使用Python制作基于文本的游戏,而我一直想使用Kivy为它制作图形界面。到目前为止,我一直无法使它工作。

原因是我已经从原来的Print and Input更改为self.label1 = Label(text ='Hello world')等(有多个变量,label2、3和4),然后对于输入,一个文本输入框,按下按钮时该输入将由功能使用(当前不涉及该文本框,因为我首先只是测试按钮是否起作用。)。问题是,我需要一种使用新值更新显示的文本的方法。例如,我希望label1更改为“这些是控件”。但是当单击按钮时,不会发生更改-我希望通过更改标签变量的值来用新文本更新GUI。我相信,由于这些已返回,因此上面的代码不再循环。我得到的想法是将不同的部分放入函数中,或使用线程。没有人有任何技巧可以将我推向正确的方向。我知道可能要问的问题太多了,如果这样,我将继续自己寻找解决方案。如果需要,我可以显示一些代码。

import kivy.uix.boxlayout
import kivy.uix.textinput
import kivy.uix.label
import kivy.uix.button
from kivy.app import App
from random import shuffle
import time
from kivy.uix.button import Button
from kivy.clock import Clock

alive = 1
buttonPressed = 0


class SimpleApp(App):
    def build(self):
        global alive
        global buttonPressed
        donext = 0
        alive = 1

        def callback(self):
            global buttonPressed
            buttonPressed = 1

        self.label1 = kivy.uix.label.Label(text="")
        self.label2 = kivy.uix.label.Label(text="")
        self.label3 = kivy.uix.label.Label(text="You have found yourself in a dungeon, somewhere is your escape path, will you make it out, and if so, what with?")
        self.label4 = kivy.uix.label.Label(text="")
        print(buttonPressed)
        if buttonPressed == 1:
            print("Has been pressed should work theoretically")
            self.label1 = kivy.uix.label.Label(text="These are the basic controls-")
            self.label2 = kivy.uix.label.Label(text="The controls-")
            self.label3 = kivy.uix.label.Label(text="A- approach enemy/ attack enemy")
            self.label4 = kivy.uix.label.Label(text="C- Go to chest")
        print("Press enter to continue.")

        self.boxLayout = kivy.uix.boxlayout.BoxLayout(orientation="vertical")
        self.boxLayout.add_widget(self.label1)
        self.boxLayout.add_widget(self.label2)
        self.boxLayout.add_widget(self.label3)
        self.boxLayout.add_widget(self.label4)
        self.btn1 = Button(text='Hello world 1', on_press=callback)
        self.boxLayout.add_widget(self.btn1)

        return self.boxLayout # Causes script not to continue
if __name__ == "__main__":
    simple = SimpleApp()
    simple.run()

1 个答案:

答案 0 :(得分:0)

如果建议您使用线程,则看来您的顾问似乎不了解GUI,在GUI中,任务是通过事件异步完成的,也就是说,GUI将为您提供方法,以指示何时发生了什么事情。 GUI,例如事件on_press在按下按钮时通知您,因此它们将信号连接到该事件。另一方面,GUI具有高度的面向对象编程,面向事件的编程功能,并且.kv是一种声明性语言,因此,我建议您阅读这些概念,并且kivy提供了许多出色的文档和示例,审查他们。如果要更新标签,至少它必须在整个类中都可访问,那么它必须是该类的一个属性并使用text属性,另一方面,如果要显示多行文本,请使用{{ 1}}表示存在跳线。

考虑到上述情况,解决方案如下:

\n