【问题标题】:kivy - python change label in different layout from codekivy - python 更改代码中不同布局的标签
【发布时间】:2022-09-28 03:49:06
【问题描述】:

我正在尝试通过在堆栈布局中创建的按钮更改带有 id:text_output 的文本标签。这应该发生在 \'def get_text()\' 但我不知道如何在 Player1 的 Boxlayout 中调用标签。 我只能访问 LetterButtons。 谷歌了几个小时,无法解决。

py文件

from kivy.lang import Builder
from kivy.properties import StringProperty, ObjectProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
import random
from wortliste import wortliste
from kivy.uix.stacklayout import StackLayout
from kivy.core.window import Window
letter_list = [\"A\", \"B\", \"C\", \"D\", \"E\",\"F\",\"G\",\"H\",\'I\',\'J\',\'K\',\'L\',\'M\',\'N\',\'O\',\'P\',\'Q\',\'R\',\'S\',\'T\',\'U\',\'V\',\'W\',\'X\',\'Y\',\'\',\'\',\'Z\',\'\',\'Enter\']

Builder.load_file(\"page_p1.kv\")

rate_wort = random.choice(wortliste)
tipp_liste: list = []
tippsammlung: str = \"\"

class Player1(BoxLayout):
    stroke_text = StringProperty(\"\")
    output_text = ObjectProperty(\"Guess\")
    status = StringProperty(\"0\")
    text_input_str = StringProperty(\"word status\")
    input_status = StringProperty(\"\")
    lives = 6
    points = 0

class LetterButtons(StackLayout):
    letter = StringProperty(\"0\")
    def __init__(self, max_but=30, **kwargs):
    super().__init__(**kwargs)
        for i in range (0,max_but):
            size_width = Window.width / (max_but/2)
            b = (Button(text=letter_list[i], on_press=self.get_text, disabled=False, size_hint=(0.2, None), border=(16, 16, 16, 16), background_color=(0, 0, 0, 1)))
            self.add_widget(b)

def get_text(self, button):
    #print(button.text)
    if button.text in tipp_liste:
        Player1.output_text = StringProperty(\"Already guessed that letter!\")

kv 文件

#:import page_p1 page_p1
<Player1>
    id: player1
    orientation: \"vertical\"
    BoxLayout:
        id: box
        orientation: \"vertical\"
        BoxLayout:
            orientation: \"horizontal\"
            size_hint: 1, None
            height: \"40dp\"
            Label:
                text: \"Lives: \" + str(root.lives)
            Label:
                text: \"Points: \" + str(root.points)
            Button:
                text: \"settings\"
        Image:
            source: \"images/s_\" + root.status +\".jpg\"
            allow_stretch: True
            keep_ratio: True
            #size_hint: 0.8, None
            pos_hint: { \"center_y\": 0.5 }
        Label:
            id: text_output
            size_hint: 1, 0.3
            font_size: \"40dp\"
            valign: \"center\"
            focus: True
            multiline: False
            text: root.output_text
        Label:
            id: text_status
            size_hint: 1, 0.3
            font_size: \"40dp\"
            valign: \"center\"
            focus: True
            multiline: False
            text: root.stroke_text

        LetterButtons:
            id: letter_buttons1
            background_normal: \'\'
            background_color: 1, .3, .4, 1

    标签: python layout kivy label


    【解决方案1】:

    我不是专家,这实际上是我的第一篇 Stack Overflow 帖子,但我认为您可以在 get_text 函数中删除 StringProperty。您已经在 Player1 类中将 output_text 分配给 ObjectPropety 并且您只是更新了值,而不是创建新属性。该函数应该是类中的一个方法,以便调用 self.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 2017-03-28
      • 2021-09-24
      • 1970-01-01
      • 2021-05-11
      • 2017-06-29
      • 1970-01-01
      相关资源
      最近更新 更多