为什么这会在 kivy 中保存相同的输入?
Why does this save the same input in kivy?
所以包含的代码根据用户给出的输入保存一个文件,为了让它更好一点,我决定添加一个 'Add' 按钮,它会创建另外 3 个文本输入,现在我学会了如何使用 id 访问它们,但它只保存前 3 个文本输入框中的输入,我尝试使用循环,因为我认为当你第二次使用它时,它可能会从第二个 3 个文本框中获取第二个输入,但它没有t work.Ps 对不起,如果代码在某些方面效率低下,这是我第一次制作应用程序
这是 py 文件
from datetime import date
from kivy.app import App
from kivy.factory import Factory
from kivy.uix.gridlayout import GridLayout
from kivy.properties import ObjectProperty
t=1
lista=[]
class MyGrid(GridLayout) :
id_1 = ObjectProperty(None)
id_2 = ObjectProperty(None)
id_3 = ObjectProperty(None)
id_4 = ObjectProperty(None)
id_10 = ObjectProperty(None)
def add(self):
self.ids.parts_text_inputs.add_widget(Factory.PartsTextInputs())
global t
t += 1
def perfundo (self) :
file = open('D:\agron\testing\' + self.id_1.text + '-' + str(date.today()) + '.txt', 'x')
global lista
global t
for i in range(0, t) :
lista.append(self.ids.parts.ids.txtinp1.text)
lista.append(self.ids.parts.ids.txtinp2.text)
lista.append(self.ids.parts.ids.txtinp3.text)
file.write('Emri dhe mbiemri :' + self.id_1.text + '\n' + 'Lloji i vetures :' + self.id_2.text + '\n' + 'Nr. i telefonit :' + self.id_3.text + '\n' + 'Problemi :' + self.id_4.text+ '\n' + 'idk :' + str(lista))
file.close()
class HAZApp(App) :
def build (self) :
return MyGrid()
app = HAZApp()
app.run()
这是 kv 文件
<PartsTextInputs@BoxLayout>: # this is a rule for building the parts TextInputs
size_hint_y: None
height: self.minimum_height
spacing: 20
TextInput:
size_hint_y: None
height: 48
id:txtinp1
BoxLayout:
size_hint_y: None
height: self.minimum_height
TextInput:
size_hint_y: None
height: 48
id:txtinp2
TextInput:
size_hint_y: None
height: 48
id:txtinp3
<MyGrid>
id: HAZ
id_1: emridhembiemri
id_2:llojiivetures
id_3:numriitelefonit
id_4:problemi
id_10:add
# rows: 10
cols: 1
padding: 10
spacing: 10
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'foto.jpg'
BoxLayout:
canvas.before:
Color:
rgba: 0.4,0.5,0.8,1
Rectangle:
size: self.size
pos: self.pos
Label:
font_size: '40sp'
outline_color: 0, 0, 0
outline_width: 2
text: 'Auto Servis "Haziri"'
BoxLayout:
spacing:10
Label:
text:"Name"
font_size: 20
color:0.4,0.5,0.8,1
Label:
text:"Type of car"
font_size: 20
color:0.4,0.5,0.8,1
Label:
text:"Phone number"
font_size: 20
color:0.4,0.5,0.8,1
Label:
text:"Problem"
font_size: 20
color:0.4,0.5,0.8,1
BoxLayout:
spacing:20
TextInput:
font_size: 20
id:emridhembiemri
TextInput:
font_size: 20
id:llojiivetures
TextInput:
font_size: 20
id:numriitelefonit
TextInput:
font_size: 20
id:problemi
BoxLayout:
spacing: 20
column:2
Label:
text:'Parts'
font_size: 20
color:0.4,0.5,0.8,1
BoxLayout:
Label:
text:'price for parts'
font_size: 20
color:0.4,0.5,0.8,1
Label:
text:'price for work'
font_size: 20
color:0.4,0.5,0.8,1
ScrollView:
size_hint_y: 3 # Since this is part of a GridLayout space is assigned by size_hint ratios
BoxLayout:
id: parts_text_inputs # this will contain all the parts TextInputs
orientation: 'vertical'
size_hint_y: None
height: self.minimum_height
PartsTextInputs:# this is the first of the parts TextInputs
id:parts
BoxLayout:
Button:
id:add
text:'Add'
on_press:root.add()
BoxLayout:
column:4
Label:
text:''
Label:
text:''
Label:
text:''
Label:
text:'Total'
BoxLayout:
column:4
Label:
text:''
Label:
text:''
Label:
text:''
Button:
text:'total'
BoxLayout:
Label:
text:''
Button:
text:'Finish'
font_size: 20
on_press:root.perfundo()
on_press: app.stop()
Label:
text:''
您得到相同的输出,因为 parts
id 仅分配给第一个 PartsTextInputs
(最初在您的 kv
中的那个)。因此多次循环访问同一个对象只会重复相同的数据。您可以通过使用 parts_text_inputs
的 id
遍历 BoxLayout
的子级来访问所有 PartsTextInputs
:
def perfundo (self) :
file = open('D:\agron\testing\' + self.id_1.text + '-' + str(date.today()) + '.txt', 'x')
global lista
global t
# get the list of all PartsTextInputs
parts_prices = self.ids.parts_text_inputs.children[:]
# reverse the list to get them in the samee order that you see on the screen
parts_prices.reverse()
# loop through all the PartsTextInputs
for ti in parts_prices:
lista.append(ti.ids.txtinp1.text)
lista.append(ti.ids.txtinp2.text)
lista.append(ti.ids.txtinp3.text)
file.write('Emri dhe mbiemri :' + self.id_1.text + '\n' + 'Lloji i vetures :' + self.id_2.text + '\n' + 'Nr. i telefonit :' + self.id_3.text + '\n' + 'Problemi :' + self.id_4.text+ '\n' + 'idk :' + str(lista))
file.close()
所以包含的代码根据用户给出的输入保存一个文件,为了让它更好一点,我决定添加一个 'Add' 按钮,它会创建另外 3 个文本输入,现在我学会了如何使用 id 访问它们,但它只保存前 3 个文本输入框中的输入,我尝试使用循环,因为我认为当你第二次使用它时,它可能会从第二个 3 个文本框中获取第二个输入,但它没有t work.Ps 对不起,如果代码在某些方面效率低下,这是我第一次制作应用程序 这是 py 文件
from datetime import date
from kivy.app import App
from kivy.factory import Factory
from kivy.uix.gridlayout import GridLayout
from kivy.properties import ObjectProperty
t=1
lista=[]
class MyGrid(GridLayout) :
id_1 = ObjectProperty(None)
id_2 = ObjectProperty(None)
id_3 = ObjectProperty(None)
id_4 = ObjectProperty(None)
id_10 = ObjectProperty(None)
def add(self):
self.ids.parts_text_inputs.add_widget(Factory.PartsTextInputs())
global t
t += 1
def perfundo (self) :
file = open('D:\agron\testing\' + self.id_1.text + '-' + str(date.today()) + '.txt', 'x')
global lista
global t
for i in range(0, t) :
lista.append(self.ids.parts.ids.txtinp1.text)
lista.append(self.ids.parts.ids.txtinp2.text)
lista.append(self.ids.parts.ids.txtinp3.text)
file.write('Emri dhe mbiemri :' + self.id_1.text + '\n' + 'Lloji i vetures :' + self.id_2.text + '\n' + 'Nr. i telefonit :' + self.id_3.text + '\n' + 'Problemi :' + self.id_4.text+ '\n' + 'idk :' + str(lista))
file.close()
class HAZApp(App) :
def build (self) :
return MyGrid()
app = HAZApp()
app.run()
这是 kv 文件
<PartsTextInputs@BoxLayout>: # this is a rule for building the parts TextInputs
size_hint_y: None
height: self.minimum_height
spacing: 20
TextInput:
size_hint_y: None
height: 48
id:txtinp1
BoxLayout:
size_hint_y: None
height: self.minimum_height
TextInput:
size_hint_y: None
height: 48
id:txtinp2
TextInput:
size_hint_y: None
height: 48
id:txtinp3
<MyGrid>
id: HAZ
id_1: emridhembiemri
id_2:llojiivetures
id_3:numriitelefonit
id_4:problemi
id_10:add
# rows: 10
cols: 1
padding: 10
spacing: 10
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'foto.jpg'
BoxLayout:
canvas.before:
Color:
rgba: 0.4,0.5,0.8,1
Rectangle:
size: self.size
pos: self.pos
Label:
font_size: '40sp'
outline_color: 0, 0, 0
outline_width: 2
text: 'Auto Servis "Haziri"'
BoxLayout:
spacing:10
Label:
text:"Name"
font_size: 20
color:0.4,0.5,0.8,1
Label:
text:"Type of car"
font_size: 20
color:0.4,0.5,0.8,1
Label:
text:"Phone number"
font_size: 20
color:0.4,0.5,0.8,1
Label:
text:"Problem"
font_size: 20
color:0.4,0.5,0.8,1
BoxLayout:
spacing:20
TextInput:
font_size: 20
id:emridhembiemri
TextInput:
font_size: 20
id:llojiivetures
TextInput:
font_size: 20
id:numriitelefonit
TextInput:
font_size: 20
id:problemi
BoxLayout:
spacing: 20
column:2
Label:
text:'Parts'
font_size: 20
color:0.4,0.5,0.8,1
BoxLayout:
Label:
text:'price for parts'
font_size: 20
color:0.4,0.5,0.8,1
Label:
text:'price for work'
font_size: 20
color:0.4,0.5,0.8,1
ScrollView:
size_hint_y: 3 # Since this is part of a GridLayout space is assigned by size_hint ratios
BoxLayout:
id: parts_text_inputs # this will contain all the parts TextInputs
orientation: 'vertical'
size_hint_y: None
height: self.minimum_height
PartsTextInputs:# this is the first of the parts TextInputs
id:parts
BoxLayout:
Button:
id:add
text:'Add'
on_press:root.add()
BoxLayout:
column:4
Label:
text:''
Label:
text:''
Label:
text:''
Label:
text:'Total'
BoxLayout:
column:4
Label:
text:''
Label:
text:''
Label:
text:''
Button:
text:'total'
BoxLayout:
Label:
text:''
Button:
text:'Finish'
font_size: 20
on_press:root.perfundo()
on_press: app.stop()
Label:
text:''
您得到相同的输出,因为 parts
id 仅分配给第一个 PartsTextInputs
(最初在您的 kv
中的那个)。因此多次循环访问同一个对象只会重复相同的数据。您可以通过使用 parts_text_inputs
的 id
遍历 BoxLayout
的子级来访问所有 PartsTextInputs
:
def perfundo (self) :
file = open('D:\agron\testing\' + self.id_1.text + '-' + str(date.today()) + '.txt', 'x')
global lista
global t
# get the list of all PartsTextInputs
parts_prices = self.ids.parts_text_inputs.children[:]
# reverse the list to get them in the samee order that you see on the screen
parts_prices.reverse()
# loop through all the PartsTextInputs
for ti in parts_prices:
lista.append(ti.ids.txtinp1.text)
lista.append(ti.ids.txtinp2.text)
lista.append(ti.ids.txtinp3.text)
file.write('Emri dhe mbiemri :' + self.id_1.text + '\n' + 'Lloji i vetures :' + self.id_2.text + '\n' + 'Nr. i telefonit :' + self.id_3.text + '\n' + 'Problemi :' + self.id_4.text+ '\n' + 'idk :' + str(lista))
file.close()