После ввода числа выводятся нули, а числа должны перемножаться на 24
main.py
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.config import Config
from kivy.core.window import Window
Config.set('kivy', 'keybord_mode', 'systemanddock')
Window.size = (360, 640)
class Container(GridLayout):
def convert(self):
try:
number = int(self.text_input.text)
except Exception:
number = 0
self.label_hours.text = str(number * 24)
self.label_minutes.text = str(number * 24 * 60)
self.label_seconds.text = str(number * 24 * 60 * 60)
self.label_m_seconds.text = str(number * 24 * 60 * 60 * 60)
self.label_weeks.text = str('%.2f' % round(number / 7, 2))
def change_something(self):
self.label_text.text = self.text_input.text
class DuckyApp(App):
def build(self):
return Container()
if __name__ == '__main__':
DuckyApp().run()
ducky.kv
<MyOwnLabel@Label>
font_size: '25sp'
haling: 'left'
valing: 'middle'
text_size: self.size
<Container>:
rows: 3
text_input: text_input
label_hours: label_hours
label_minutes: label_minutes
label_seconds: label_seconds
label_m_seconds: label_m_seconds
label_weeks: label_weeks
AnchorLayout:
anchor_y: 'top'
id: text_input
size_hint: 1, 0.15
input_filter: 'int'
input_type: 'number'
multiline: False
TextInput:
text: ''
font_size: '45sp'
GridLayout:
cols: 2
padding: [40, 0, 0, 0]
BoxLayout:
orientation: 'vertical'
MyOwnLabel:
text: 'Hours'
MyOwnLabel:
text: 'Minutes'
MyOwnLabel:
text: 'Seconds'
MyOwnLabel:
text: 'Milliseconds'
MyOwnLabel:
text: 'Weeks'
BoxLayout:
orientation: 'vertical'
size_hint: 0.5, 1
MyOwnLabel:
text: '0'
id: label_hours
MyOwnLabel:
text: '0'
id: label_minutes
MyOwnLabel:
text: '0'
id: label_seconds
MyOwnLabel:
text: '0'
id: label_m_seconds
MyOwnLabel:
text: '0'
id: label_weeks
BoxLayout:
size_hint: 0.9, 0.15
padding: [30, 20, 30, 20]
Button:
text: "Let's go!"
on_release:
root.convert()
Ответы (3 шт):
Автор решения: LevAri
→ Ссылка
Ответ в стиле "кэп очевидность".
У вас выводится 0, потому что отрабатывает ветка вашего try\catch условия. Перемножать 0, как известно, можно на что угодно, только результат не изменится.
Соответственно, по всей видимости ошибка в self.text_input.text. Проверяйте, как вы работаете с данным элементом.
Автор решения: Sd1g
→ Ссылка
У тебя всё в файле вперемешку. Вот правильный вариант твоего приложения:
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.properties import ObjectProperty
from kivy.core.window import Window
from kivy.config import Config
def count(m):
hours = str(m * 24)
minutes = str(m * 24 * 60)
seconds = str(m * 24 * 60 * 60)
m_seconds = str(m * 24 * 60 * 60 * 60)
weeks = str('%.2f' % round(m / 7, 2))
return {'1': hours, '2': minutes, '3': seconds, '4': m_seconds, '5': weeks}
#Window.size = (480, 853)
#Config.set('kivy', 'keyboard_mode', 'systemanddock')
class MainMenu(GridLayout):
def calculate(self):
try:
mass = int(self.text_input.text)
except:
mass = 0
amount = count(mass)
self.first.text = amount.get('1')
self.second.text = amount.get('2')
self.third.text = amount.get('3')
self.fourth.text = amount.get('4')
self.fifth.text = amount.get('5')
class MyApp(App):
def build(self):
return MainMenu()
if __name__ == '__main__':
MyApp().run()
<IngridientName@Label>:
font_size: '25sp'
text_size: self.size
halign: 'left'
valign: 'middle'
<IngridientAmount@Label>:
font_size: '25sp'
text_size: self.size
halign: 'right'
valign: 'middle'
<MainMenu>:
rows: 3
text_input: text_input
first: first
second: second
third: third
fourth: fourth
fifth: fifth
sixth: sixth
AnchorLayout:
size_hint: 1, 0.1
padding: [5, 5, 5, 0]
TextInput:
id: text_input
pos_hint: {'center_x': 0.5, 'y': -1}
multiline: False
font_size: '40sp'
input_type: 'number'
input_filter: 'int'
GridLayout:
cols:2
BoxLayout:
orientation: 'vertical'
padding: [10, 0, 0, 0]
IngridientName:
text: 'Hours'
IngridientName:
text: 'Minutes'
IngridientName:
text: 'Seconds'
IngridientName:
text: 'M seconds'
IngridientName:
text: 'Weeks'
BoxLayout:
orientation: 'vertical'
padding: [0, 0, 10, 0]
IngridientAmount:
id: first
text: '0'
IngridientAmount:
id: second
text: '0'
IngridientAmount:
id: third
text: '0'
IngridientAmount:
id: fourth
text: '0'
IngridientAmount:
id: fifth
text: '0'
IngridientAmount:
id: sixth
text: '0'
FloatLayout:
size_hint: 1, 0.1
Button:
pos_hint: {'center_x': 0.5, 'y': 0.1}
size_hint: 0.8, 1
text: 'Посчитать'
font_size: 40
on_release:
root.calculate()
Автор решения: ムkula
→ Ссылка
Ошибка из-за которой не выполнялась програма была файле ducky.ky, не в том месте были указаны параметры для TextInput, вот исправленый вариант:
AnchorLayout:
anchor_y: 'top'
size_hint: 1, 0.15
TextInput:
text: ''
id: text_input
font_size: '45sp'
input_filter: 'int'
input_type: 'number'
multiline: False