如何利用kivy设计一个界面 并包含数字输入 然后确定按钮 数字输入可以生成相应竖排卡片并且输入2会生成2个输入3会生成3个以此类推并添加删除卡片的按钮 并且可以点击卡片跳转到卡片的设置页面 并且卡片输入的内容以文件存储的形式存储在C盘内
时间: 2024-05-02 22:21:31 浏览: 80
以下是一个简单的Kivy界面,包含数字输入、确定按钮和一个Label显示输入的数字。当点击确定按钮时,会生成相应数量的竖排卡片,并且每个卡片都有一个删除按钮。当点击卡片时,会跳转到卡片的设置页面。输入的内容以文件存储的形式存储在C盘内。
```
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.uix.screenmanager import ScreenManager, Screen
import os
class CardManager(ScreenManager):
pass
class Card(Screen):
def __init__(self, num, **kwargs):
super().__init__(**kwargs)
self.num = num
self.layout = BoxLayout(orientation='vertical')
self.label = Label(text=f'Card {num}', font_size=20)
self.delete_btn = Button(text='Delete', size_hint_y=None, height=50)
self.layout.add_widget(self.label)
self.layout.add_widget(self.delete_btn)
self.add_widget(self.layout)
self.delete_btn.bind(on_press=self.delete_card)
def delete_card(self, instance):
self.parent.remove_widget(self)
class MainScreen(Screen):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.layout = BoxLayout(orientation='vertical')
self.num_input = TextInput(multiline=False, input_type='number')
self.confirm_btn = Button(text='Confirm', size_hint_y=None, height=50)
self.label = Label(text='', font_size=20)
self.card_manager = CardManager()
self.layout.add_widget(self.num_input)
self.layout.add_widget(self.confirm_btn)
self.layout.add_widget(self.label)
self.layout.add_widget(self.card_manager)
self.add_widget(self.layout)
self.confirm_btn.bind(on_press=self.create_cards)
def create_cards(self, instance):
try:
num = int(self.num_input.text)
except ValueError:
return
self.label.text = f'Creating {num} cards...'
for i in range(num):
card = Card(i+1)
self.card_manager.add_widget(card)
self.label.text = ''
self.num_input.text = ''
class MyApp(App):
def build(self):
self.main_screen = MainScreen()
sm = ScreenManager()
sm.add_widget(self.main_screen)
return sm
def on_stop(self):
# Save card data to file
cards_data = []
for screen in self.main_screen.card_manager.screens:
card_data = {'num': screen.num}
cards_data.append(card_data)
with open(os.path.join('C:\\', 'cards_data.txt'), 'w') as f:
f.write(str(cards_data))
return super().on_stop()
if __name__ == '__main__':
MyApp().run()
```