gpt4 book ai didi

python - 如何在循环中加上整数值

转载 作者:太空狗 更新时间:2023-10-29 21:06:32 24 4
gpt4 key购买 nike

我有两个文件 demo.pydemo.kv。有人可以帮我吗?

1+Add More add row dynamic.After fill value when i click on Total Value 然后它显示像 151012 这样的字符串。不显示 12+10+15=37。我正在为它使用代码

        test = ''
for val in values:
test = val[2]+test

self.total_value.text = test

2。谁能告诉我如何在填充 value TextBox 后将值的总和放入 Total value TextBox 而不是单击 Total Value Box.Means 如何从 value 文本框调用 def test(self) 函数?


演示.py

from kivy.uix.screenmanager import Screen
from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import BooleanProperty, ListProperty, StringProperty, ObjectProperty, NumericProperty
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button

Window.clearcolor = (0.5, 0.5, 0.5, 1)
Window.size = (500, 400)

class User(Screen):
total_value = ObjectProperty(None)

def add_more(self):
self.ids.rows.add_row()

def test(self):
values = []
rows = self.ids.rows

for row in reversed(rows.children):
vals = []
for ch in reversed(row.children):
if isinstance(ch, TextInput):
vals.append(ch.text)
if isinstance(ch, Button):
vals.insert(0, ch.text)
values.append(vals)

test = ''
for val in values:
test = val[2]+test

self.total_value.text = test

class Row(BoxLayout):
col_data = ListProperty(["?", "?", "?", "?", "?"])
button_text = StringProperty("")
col_data3 = StringProperty("")
col_data4 = StringProperty("")

def __init__(self, **kwargs):
super(Row, self).__init__(**kwargs)



class Rows(BoxLayout):
row_count = 0

def __init__(self, **kwargs):
super(Rows, self).__init__(**kwargs)
self.add_row()

def add_row(self):
self.row_count += 1
self.add_widget(Row(button_text=str(self.row_count)))


class Test(App):

def build(self):
self.root = Builder.load_file('demo.kv')
return self.root


if __name__ == '__main__':
Test().run()

演示.kv

<Row>:
size_hint_y: None
height: self.minimum_height
height: 40

Button:
text: root.button_text
size_hint_x: None
top: 200

TextInput:
text: root.col_data3
width: 300
TextInput:
text: root.col_data4
width: 300


<Rows>:
size_hint_y: None
height: self.minimum_height
orientation: "vertical"

User:
total_value:total_value
BoxLayout:
orientation: "vertical"
padding : 20, 5


BoxLayout:
orientation: "horizontal"
#padding : 10, 10
spacing: 10, 10
size: 450, 40
size_hint: None, None

Label:
size_hint_x: .2
text: "Number"
text_size: self.size
valign: 'bottom'
halign: 'center'

Label:
size_hint_x: .4
text: "name"
text_size: self.size
valign: 'bottom'
halign: 'center'

Label:
size_hint_x: .4
text: "Value"
text_size: self.size
valign: 'bottom'
halign: 'center'




ScrollView:
Rows:
id: rows

BoxLayout:
orientation: "horizontal"
padding : 10, 5
spacing: 10, 10
size: 200, 40
size_hint: None, None

Label:
size_hint_x: .7
text: "Total value"

TextInput:
id: total_value
on_focus:root.test()



BoxLayout:
orientation: "horizontal"
size_hint_x: .2
size_hint_y: .2

Button:
text: "+Add More"
on_press: root.add_more()

如果可以的话,这将是一个很大的帮助。

最佳答案

要以简单的方式访问元素,您必须设置 id,在这种情况下,我会将一个设置为与数字输入关联的 TextInput,您还必须放置一个过滤器以仅接受数值:

TextInput:
id: number_input
text: root.col_data4
width: 300
input_filter: 'int'

然后方法 test() 被简化为如下:

class User(Screen):
total_value = ObjectProperty(None)
def add_more(self):
self.ids.rows.add_row()

def test(self):
rows = self.ids.rows
total = 0
for row in rows.children:
text = row.ids.number_input.text
total += int(text) if text != "" else 0 # validate if the entry is not empty
self.total_value.text = str(total)

为了能够自动更新值,我们将文本更改链接到一个函数,并在其中调用 test(),为了访问测试,我们必须放置一个 id屏幕:

User:
id: user
total_value: total_value
[...]

能够从 App.get_running_app() 访问屏幕:

class Row(BoxLayout):
button_text = StringProperty("")
col_data3 = StringProperty("")
col_data4 = StringProperty("")
def __init__(self, *args, **kwargs):
super(Row, self).__init__(*args, **kwargs)
self.ids.number_input.bind(text=self.on_text)

def on_text(self, text_input, value):
App.get_running_app().root.test()

完整代码:

演示.py

from kivy.uix.screenmanager import Screen
from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import BooleanProperty, ListProperty, StringProperty, ObjectProperty, NumericProperty
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button

Window.clearcolor = (0.5, 0.5, 0.5, 1)
Window.size = (500, 400)

class User(Screen):
total_value = ObjectProperty(None)
def add_more(self):
self.ids.rows.add_row()

def test(self):
rows = self.ids.rows
total = 0
for row in rows.children:
text = row.ids.number_input.text
total += int(text) if text != "" else 0
self.total_value.text = str(total)

class Row(BoxLayout):
button_text = StringProperty("")
col_data3 = StringProperty("")
col_data4 = StringProperty("")
def __init__(self, *args, **kwargs):
super(Row, self).__init__(*args, **kwargs)
self.ids.number_input.bind(text=self.on_text)

def on_text(self, text_input, value):
App.get_running_app().root.test()

class Rows(BoxLayout):
row_count = 0
def __init__(self, **kwargs):
super(Rows, self).__init__(**kwargs)
self.add_row()

def add_row(self):
self.row_count += 1
self.add_widget(Row(button_text=str(self.row_count)))


class Test(App):
def build(self):
self.root = Builder.load_file('demo.kv')
return self.root


if __name__ == '__main__':
Test().run()

演示.kv

<Row>:
size_hint_y: None
height: self.minimum_height
height: 40

Button:
text: root.button_text
size_hint_x: None
top: 200

TextInput:
text: root.col_data3
width: 300

TextInput:
id: number_input
text: root.col_data4
width: 300
input_filter: 'int'

<Rows>:
size_hint_y: None
height: self.minimum_height
orientation: "vertical"

User:
id: user
total_value: total_value
BoxLayout:
orientation: "vertical"
padding : 20, 5

BoxLayout:
orientation: "horizontal"
#padding : 10, 10
spacing: 10, 10
size: 450, 40
size_hint: None, None

Label:
size_hint_x: .2
text: "Number"
text_size: self.size
valign: 'bottom'
halign: 'center'

Label:
size_hint_x: .4
text: "name"
text_size: self.size
valign: 'bottom'
halign: 'center'

Label:
size_hint_x: .4
text: "Value"
text_size: self.size
valign: 'bottom'
halign: 'center'


ScrollView:
Rows:
id: rows

BoxLayout:
orientation: "horizontal"
padding : 10, 5
spacing: 10, 10
size: 200, 40
size_hint: None, None

Label:
size_hint_x: .7
text: "Total value"

TextInput:
id: total_value
on_focus:root.test()



BoxLayout:
orientation: "horizontal"
size_hint_x: .2
size_hint_y: .2

Button:
text: "+Add More"
on_press: root.add_more()

关于python - 如何在循环中加上整数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48224201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com