0

ボタンの 1 つをクリックすると、表示されるポップアップは編集されておらず、load_string で提供される情報が完全に欠落しています。load_string で提供されるデータに対応するポップアップ クラスを取得するにはどうすればよいですか? どのように見えるか:スクリーンショット. タイトルとテキスト入力ウィジェットが必要です。

編集: kv 言語で「Popup_Up」を「Pop_Up」に変更しましたが、問題はまだ残っています。

from logic import grandtotal
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.popup import Popup
from kivy.uix.textinput import TextInput
from kivy.properties import ObjectProperty  
from kivy.lang import Builder

class Text_Input(TextInput):
    pass

class Pop_Up(Popup):
    texti_id = ObjectProperty(None)
    pass


class ShoppersApp(App, BoxLayout):
    popup_cost = ObjectProperty(Pop_Up())
    popup_people = ObjectProperty(Pop_Up())
    def build(self):
        return self

Builder.load_string("""
<Text_Input>:
    size_hint: .6, .5

<Pop_Up>:
    title: "Total Cost: "


<ShoppersApp>:
    BoxLayout:
        orientation: "vertical"
        Button:
            text: "Total Cost"
            on_release: root.popup_cost.open()
        Button:
            text: "People"
            on_release: root.popup_people.open()
        Label:
            text: "3"
""")

if __name__ == "__main__":
    ShoppersApp().run()
4

2 に答える 2

0

kv 言語部分は a の動作方法を定義します<Popup_Up>:が、python クラスは と呼ばれPop_Upます。これがあなたの例のタイプミスなのか、実際のコードなのかはわかりませんが、どちらにしても同じ名前を付ける必要があります。

編集:あなたのタイプミスの編集によると、1つのことを修正しているように、本当の問題はその行だと思います

popup_cost = ObjectProperty(Pop_Up())
popup_people = ObjectProperty(Pop_Up())

ビルダー ファイルがロードされる前に実行されます (およびPop_Up()s が初期化されます) 。それらは kv 言語によってさかのぼって変更されないため、タイトルが設定されることはありません。

load_string 呼び出しをファイルの先頭に移動するだけでこれが修正されるようですが、もともとは ShoppersApp の init メソッドを変更して、以下のようにポップアップを動的に作成することで修正しました。これは、あなたが何をしているかにもよりますが、より一般的に安全で便利な方法かもしれません。

class ShoppersApp(App, BoxLayout):
    popup_cost = ObjectProperty(Pop_Up())
    popup_people = ObjectProperty(Pop_Up())
    def __init__(self,*args,**kwargs):
        super(ShoppersApp,self).__init__(*args,**kwargs)
        self.popup_cost = Pop_Up()
        self.popup_people = Pop_Up()
    def build(self):
        return self

また、ShoppersApp が app と BoxLayout の両方をサブクラス化すると、不安になります。ドキュメントなどで提案されている場合は問題ないか、適切かもしれませんが、App ウィジェットと ShopperLayout ウィジェットを別々にする方が安全かもしれません。

于 2013-06-30T21:29:35.287 に答える