Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在kivy窗口中添加更多值,并在同一窗口中的新标签dynamic array中获得结果_Python_Arrays_Dynamic_Kivy_Screen - Fatal编程技术网

Python 在kivy窗口中添加更多值,并在同一窗口中的新标签dynamic array中获得结果

Python 在kivy窗口中添加更多值,并在同一窗口中的新标签dynamic array中获得结果,python,arrays,dynamic,kivy,screen,Python,Arrays,Dynamic,Kivy,Screen,我是Kivy的新手,需要你的帮助。我有一个小问题: 我需要一个动态数组,用户可以在第一个文本输入字段中输入第一个值,然后他可以按“新行”按钮,他有机会在新文本输入字段中输入第二个值,因为他可以再次按“新行”按钮,他可以在新文本输入字段中输入第三个值。通过“结果”,他可以随时调用标签中这些值的总和 如何创建此动态数组?多谢各位 这是我的main.py文件 from kivy.clock import Clock from kivy.uix.textinput import TextInput fr

我是Kivy的新手,需要你的帮助。我有一个小问题:

我需要一个动态数组,用户可以在第一个文本输入字段中输入第一个值,然后他可以按“新行”按钮,他有机会在新文本输入字段中输入第二个值,因为他可以再次按“新行”按钮,他可以在新文本输入字段中输入第三个值。通过“结果”,他可以随时调用标签中这些值的总和

如何创建此动态数组?多谢各位

这是我的main.py文件

from kivy.clock import Clock
from kivy.uix.textinput import TextInput
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty

Builder.load_file('MyMain.kv')
class WindowManager(ScreenManager):
    pass


class MainWindow(Screen):

    def __init__(self, **kwargs):
        super(MainWindow, self).__init__(**kwargs)
        self.counter = 1
        Clock.schedule_once(self.add_stuff)

    def add_stuff(self, *args):
        self.textlist = [TextInput()]
        self.ids.grid.add_widget(Label(text='Input value {}'.format(self.counter)))
        self.counter += 1
        self.ids.grid.add_widget(self.textlist[0])

    # function to create new inputs, that button 'new line' calls:
    def addnewtextinput(self):
        self.ids.grid.add_widget(Label(text='Input value ' + str(self.counter)))
        self.counter += 1
        self.textlist.append(TextInput())
        self.ids.grid.add_widget(self.textlist[-1])

    # function to get a result:
    def getresult(self):
        result = 0
        for i in self.textlist:
        # you may convert it to float if you need, like float(i.text)
            result += int(i.text)
        self.ids.label_id.text = str(result)


class MyMainApp(App):
    def build(self):
        b1=WindowManager()
        MainWindow()
        return b1


if __name__ == "__main__":
    MyMainApp().run()
这是MyMain.kv

<CustButton@Button>:
    font_size: 40

<WindowManager>:
    MainWindow:

<MainWindow>:
    name: "main"
    # don't forget to add this
    grid: grid.__self__

    GridLayout:
        cols:1

        # you will control that GridLayout from .py so here it's empty
        GridLayout:
            # set the id to be able to control it from .py file
            id: grid
            cols: 2

        CustButton:
            text: "new line"
            on_press: root.addnewtextinput()

        CustButton:
            text: "result"
            font_size: "30sp"
            on_press: root.getresult()

        TextInput:
            id:label_id
            font_size: 40
            multiline: True
:
字体大小:40
:
主窗口:
:
名称:“主要”
#别忘了加上这个
网格:网格__
网格布局:
科尔斯:1
#您将从.py控制GridLayout,所以这里它是空的
网格布局:
#将id设置为能够从.py文件控制它
id:网格
科尔斯:2
按钮:
正文:“新行”
on_press:root.addNewtPut()
按钮:
正文:“结果”
字体大小:“30sp”
按以下键:root.getresult()
文本输入:
id:label\u id
字体大小:40
多行:正确

我看不见kivy的窗户。。您能帮助我吗?

您的代码中有一些错误的地方,但要运行它,您需要做的是:

  • 首先,将根小部件
    WindowManager:
    更改为规则
    ,然后
  • 其次,在小部件完成初始化后,使用
    Clock.schedule\u once(self.add\u stuff)
    添加内容
.py
应如下所示:

类窗口管理器(屏幕管理器):
通过
类主窗口(屏幕):
定义初始(自我,**kwargs):
超级(主窗口,自我)。\uuuuu初始化(**kwargs)
self.counter=1
时钟。计划一次(自我添加)
def add_stuff(self,*args):
self.textlist=[TextInput()]
self.ids.grid.add_小部件(标签(text='Input value{}'。格式(self.counter)))
self.counter+=1
self.ids.grid.add_小部件(self.textlist[0])
#函数创建新输入,按钮“新行”调用:
def添加输出(自身):
self.ids.grid.add_小部件(标签(text='Input value'+str(self.counter)))
self.counter+=1
self.textlist.append(TextInput())
self.ids.grid.add_小部件(self.textlist[-1])
#函数以获取结果:
def getresult(self):
结果=0
对于self.textlist中的i:
#如果需要,可以将其转换为float,比如float(i.text)
结果+=int(i.text)
self.ids.label\u id.text=str(结果)
类MyMainApp(应用程序):
def生成(自):
b1=WindowManager()
主窗口()
返回b1
如果名称=“\uuuuu main\uuuuuuuu”:
MyMainApp().run()

回答为什么你什么都看不见:

如果要在不调用Builder.load_file的情况下自动加载kv文件,则需要确保kv文件的名称是应用程序类的名称减去应用程序部分

例如,在您的情况下,您的kv文件应该命名为mymain.kv而不是main.kv

要手动加载kv文件,请使用builder

Builder.load_file('main.kv')
请查看以获得更多帮助

在这之后,答案应该会让你走完剩下的路。
希望有帮助

你好,noEmbryo谢谢你的回答,我不太明白你的句子“当小部件使用Clock.schedule\u完成初始化时添加东西一次(self.add\u stuff)。”我应该将它添加到.kv文件中吗?@jan在我的回答中重新表述了它。我的意思是,您必须首先让小部件完成其初始化(运行
init
方法),然后向其添加一些小部件。当你安排某事时,它会在第一个可用的时刻执行(在
init
之后)。修复的
.py
包含此调用。问题是我无法到达.KV文件,形成文件。py模块“Builder”未激活,我有以下错误:“第20行,在add_stuff self.ids.grid.add_小部件(Label(text='Input value{}.format(self.counter)))文件“kivy\properties.pyx“,第863行,kivy.properties.observedict.\uuu getattr\uuuuu”AttributeError:“super”对象没有属性“getattr”@jan很高兴听到这个消息。所以你可以…我必须对任务做一些小的更改:相反,用户必须在第一个文本输入“第一个输入值”和点中写入不同的值。”。“在每个值之间,例如9.2如果他按Enter键,您可以创建一个新框,“第二个输入值”,然后他可以继续在第二个框中写入值,例如1,他可以按“结果”,他可以在两个不同标签中获得总和第一个框“9”中的第一个值加上第二个框“1”中的第一个值第二个框“2”中的第二个值”加上第二个框“0”中的第二个值如何在框中创建此动态数组?谢谢