在两个奇异画面中添加两个值并获得结果

问题描述 投票:0回答:1

我正在尝试构建一个可以计算两个值之和的应用。我有一个名为Therdwindow的屏幕,其中有三个文本输入小部件。

from kivy.app import App 
from kivy.app import App 
from kivy.uix.label import Label
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.scatter import Scatter
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.textinput import TextInput
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen`
class MainWindow(Screen):
    pass
class SecondWindow(Screen):
    pass
class Therdwindow(Screen):
    pass
class Fourwindow(Screen):
    pass
class FunfthWindow(Screen):
    def calculate3(self,bibi,mimi):
        kiki = str(float(bibi) + float(mimi))
        if kiki:
            try :
                self.result_1.text = str(eval(kiki)) 
            except Exception: 
                self.result_1.text = 'Error'

class Sixwindow(Screen):
    pass
class WindowManager(ScreenManager):
    psss
kv = Builder.load_file("layout.kv")
class MyMainApp(App):
    def build(self):
        return kv
if __name__ == "__main__":
    MyMainApp().run()

[一个人应该输入密码'gin',而不是单击按钮“ NEXT”进入下一个名为SecondWindow的屏幕,然后单击按钮'NEXT'进入下一个名为TherdWindow的屏幕,

然后在“方框”中输入“第一个值”,然后单击“下一步”按钮转到下一个名为fourWindow的屏幕,而不是输入第二个Value并单击按钮“ NEXT”转到名为funfthWindow的下一个屏幕。

如果他单击按钮结果,则应该有“结果”。在此屏幕中,有一个标签应打印该人指定的总金额。

layout.kv

<CustButton@Button>: 
     font_size: 40
WindowManager:
    MainWindow:
    SecondWindow:
    Therdwindow:
    Fourwindow:
    FunfthWindow:
    Sixwindow:

<MainWindow>:
     name: "main"

    <MainWindow>:
        name: "main"
        GridLayout:
            cols:1

            GridLayout:
                cols: 2
                orientation: 'vertical'

                Label:
                    text: "Password: "
                    font_size: "40sp"
                    background_color: (1,1,0,1)
                    font_name: 'RobotoMono-Regular.ttf'

                TextInput:
                    id: passw
                    multiline: False
                    font_size: "40sp"

            CustButton:
                text: "Submit"
                background_color: (0.8,0.8,0,1)
                on_press:
                    app.root.current = "second" if passw.text == "gin" else "six"
                    root.manager.transition.duration = 1 
                    root.manager.transition.direction = "left"


<SecondWindow>:
     name: "second"

     GridLayout:

         cols: 1
         spacing: 10
         CustButton:
             text: "Go Back"
             on_press:
                 app.root.current = "main"
                 root.manager.transition.direction = "right"

         CustButton:
             text: "next"
             on_press:
                 app.root.current = "therd"
                 root.manager.transition.direction = "left"


<Therdwindow>:
     id:lulu
     name: "therd"
     nani:feras1
     rows: 20
     padding: 0
     spacing: 2



     GridLayout:
         spacing: 10
         cols:2
         Label:
             text: "Enter The First Value :  "
             font_size: "30sp"


         TextInput: 
             id:first_Value
             font_size: 40
             multiline: True



         CustButton: 
             text: "go back"
             on_press:
                 app.root.current = "second"
                 root.manager.transition.direction = "right"

         CustButton: 
             text: "Next"
             on_press:
                 app.root.current = "four"
                 root.manager.transition.direction = "left"


<Fourwindow>:
     id:lala
     name: "four"
     nani21:feras2
     rows: 20
     padding: 0
     spacing: 2



     GridLayout:
         spacing: 10
         cols:2
         Label:
             text: "Enter The second Value : "
             font_size: "30sp"



         TextInput: 
             id: second_Value
             font_size: 40
             multiline: True



         CustButton: 
             text: "go back"
             on_press:
                 app.root.current = "therd"
                 root.manager.transition.direction = "right"

         CustButton: 
             text: "NEXT"
             on_press:
                 app.root.current = "funfth"
                 root.manager.transition.direction = "left"


<FunfthWindow>: 
     id:CalcmGridLayout
     name: "funfth"            
     result_1:label_id
     rows: 20
     padding: 0
     spacing: 2



     GridLayout:
         spacing: 10
         cols:2

         CustButton: 
             text: "Result :  "
             font_size: "30sp"
             on_press:CalcmGridLayout.calculate3(first_Value.text,second_Value.text)

         Label: 
             id: label_id
             font_size: 40
             multiline: True    

         CustButton: 
             text: "go back"
             on_press:
                 app.root.current = "four"
                 root.manager.transition.direction = "right"

         CustButton: 
             text: "NEXT"
             on_press:
                 app.root.current = "main"
                 root.manager.transition.direction = "left"


<Sixwindow>:
     name: "six"            
     GridLayout:
         cols: 1
         spacing: 10
         Label:
             text: 'das Password ist falsch'
             font_size: "40sp"

         CustButton:
             text: "nochmal"
             on_press:
                 app.root.current = "main"
                 root.manager.transition.direction = "right"

单击“ 结果”时,出现此错误NameError : first_Value is not defined

请帮助。我真的很感谢任何建议。

python user-interface kivy screen id
1个回答
0
投票

嗯,有很多方法可以做到这一点,为简单起见,我将在MyMainApp类中进行所有操作:

 from kivy.properties import ObjectProperty
 from Kivy.clock import Clock
...
class Therdwindow(Screen):

    first_Value = ObjectProperty(None)

    def getvalue(self):
        return self.first_Value

class Fourwindow(Screen):

    second_Value = ObjectProperty(None)

    def getvalue(self):
        return self.second_Value

class FunfthWindow(Screen):

    label_id = ObjectProperty(None)

    def getlabel(self):
        return self.label_id

class WindowManager(ScreenManager):
    pass


class MyMainApp(App):
    def build(self):
        with open('layout.kv', encoding='utf-8', errors='ignore') as f:
            Builder.load_string(f.read())
        # creating objects of screens
        self.mainwindow = MainWindow()
        self.secondwindow = SecondWindow()
        self.therdwindow = Therdwindow()
        self.fourwindow = Fourwindow()
        self.funfthwindow = FunthWindow()

        # creating object of screen manager
        self.sm = WindowManager()

        # getting all object properties
        self.first_Value = self.therdwindow.getvalue()
        self.second_Value = self.fourwindow.getvalue()
        self.label_id = self.funfthwindow.getlabel()

        # connecting object properties to widgets from kv file
        # sometimes we need to delay that, because the app can't load so quickly, so let's make a method for it
        Clock.schedule_once(self.getids)

        # adding screens to screen manager
        self.sm.add_widget(self.mainwindow)
        self.sm.add_widget(self.secondwindow)
        self.sm.add_widget(self.therdwindow)
        self.sm.add_widget(self.fourwindow)
        self.sm.add_widget(self.funfthwindow)
        # in case you want screen manager be able to work you should return it
        return self.sm

    def getids(self):
        self.first_Value = self.therdwindow.ids.first_Value
        self.second_Value = self.fourwindow.ids.second_Value
        self.label_id = self.funfthwindow.ids.label_id

    # method that does what you want
    def count(self):
        self.label_id.text = str(int(self.first_Value.text) + int(self.second_Value.text))

if __name__ == "__main__":
    MyMainApp().run()

并且您需要编辑kv文件,进行所有更改

on_press:
    app.root.current = "second"

至此:

on_press:
    app.sm.current = "second"

并更改此:

CustButton: 
             text: "Result :  "
             font_size: "30sp"
             on_press:CalcmGridLayout.calculate3(first_Value.text,second_Value.text)

至此:

CustButton: 
             text: "Result :  "
             font_size: "30sp"
             on_press: app.count

并删除此:

WindowManager:
    MainWindow:
    SecondWindow:
    Therdwindow:
    Fourwindow:
    FunfthWindow:
    Sixwindow:
© www.soinside.com 2019 - 2024. All rights reserved.