@lacevedoufe
Изучаю Python

Как перенести содержимое переменной в файл .kv?

Решил написать 'Симулятор открытия кейсов', но не понимаю, как обновить содержимое инвентаря после выпадения.
Ниже весь код, в переменной 'inventory' должно списком храниться всё содержимое, и для каждого из них в экране с инвентарем в GridLayout'е должен создаваться отдельный виджет.

main.py:

from kivy.app import App
from kivy.config import Config
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
import random

Config.set('graphics', 'width', 1366)
Config.set('graphics', 'height', 768)
Config.set('graphics', 'fullscreen', 1)
Config.set('kivy', 'exit_on_escape', 1)
# все скины из инвентаря
inventory = []


def upd_inv():
    for i in inventory:
        pass


class MenuScreen(Screen):
    pass


class CasesScreen(Screen):
    pass


class InvScreen(Screen):
    pass

#Snakebite - название кейса
class SnakebiteScreen(Screen):
    def open_case(self):
        global inventory
        # Шанс на выпадение скинов
        chance = random.randint(1, 10000)
        # Шанс 79,92%
        if chance <= 7992:
            inventory.append('**SKIN**')
        # Шанс 15,98%
        elif chance <= 9590:
            inventory.append('**SKIN**')
        # Шанс 3,2%
        elif chance <= 9910:
            inventory.append('**SKIN**')
        # Шанс 0,64%
        elif chance <= 9974:
            inventory.append('**SKIN**')
        # Шанс 0,26%
        else:
            inventory.append('*Gloves*')


class CaseApp(App):
    def build(self):
        sm = ScreenManager(transition=NoTransition())
        # Добавить все экраны
        sm.add_widget(MenuScreen(name='menu'))
        sm.add_widget(CasesScreen(name='cases'))
        sm.add_widget(InvScreen(name='inv'))
        sm.add_widget(SnakebiteScreen(name='snakebite'))
        return sm


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


case.kv:

#: kivy 2.0.0
<MenuScreen>:
	AnchorLayout:
		BoxLayout:
			orientation: 'vertical'
			size_hint: .25, .35
			spacing: 20
			Button:
				text: 'Играть'
				font_size: 25
				on_press: root.manager.current = 'cases'
			Button:
				text: 'Выход'
				font_size: 25
				on_press: exit()

<CasesScreen>:
	BoxLayout:
		orientation: 'vertical'
		# Верхнее меню
		BoxLayout:
			size_hint: 1, .1
			Label:
				text: 'Кейсы'
			Button:
				text: 'Инвентарь'
				on_press: root.manager.current = 'inv'
			Button:
				text: 'Меню'
				on_press: root.manager.current = 'menu'
		# Все кейсы
		GridLayout:
            size_hint: 1, .9
			cols: 7
			rows: 5
			Button:
				background_normal: 'cases\\snakebite_case.png'
				on_press: root.manager.current = 'snakebite'
			Button:
				background_normal: 'cases\\broken_fang_case.png'
			Button:
				background_normal: 'cases\\fracture_case.png'
			Button:
				background_normal: 'cases\\prisma_2_case.png'
			Button:
				background_normal: 'cases\\web_case.png'
			Button:
				background_normal: 'cases\\cs20_case.png'
			Button:
				background_normal: 'cases\\prisma_case.png'
			Button:
				background_normal: 'cases\\danger_zone_case.png'
			Button:
				background_normal: 'cases\\horizon_case.png'
			Button:
				background_normal: 'cases\\clutch_case.png'
			Button:
				background_normal: 'cases\\spectrum_2_case.png'
			Button:
				background_normal: 'cases\\operation_hydra_case.png'
			Button:
				background_normal: 'cases\\spectrum_case.png'
			Button:
				background_normal: 'cases\\glove_case.png'
			Button:
				background_normal: 'cases\\gamma_2_case.png'
			Button:
				background_normal: 'cases\\gamma_case.png'
			Button:
				background_normal: 'cases\\chroma_3_case.png'
			Button:
				background_normal: 'cases\\operation_wildfire_case.png'
			Button:
				background_normal: 'cases\\revolver_case.png'
			Button:
				background_normal: 'cases\\shadow_case.png'
			Button:
				background_normal: 'cases\\falchion_case.png'
			Button:
				background_normal: 'cases\\chroma_2_case.png'
			Button:
				background_normal: 'cases\\chroma_case.png'
			Button:
				background_normal: 'cases\\operation_vanguard_case.png'
			Button:
				background_normal: 'cases\\esports_2014_summer_case.png'
			Button:
				background_normal: 'cases\\operation_breakout_case.png'
			Button:
				background_normal: 'cases\\huntsman_case.png'
			Button:
				background_normal: 'cases\\operation_phoenix_case.png'
			Button:
				background_normal: 'cases\\csgo_weapon_case_3.png'
			Button:
				background_normal: 'cases\\winter_offensive_case.png'
			Button:
				background_normal: 'cases\\esports_2013_winter_case.png'
			Button:
				background_normal: 'cases\\csgo_weapon_case_2.png'
			Button:
				background_normal: 'cases\\operation_bravo_case.png'
			Button:
				background_normal: 'cases\\esports_2013_case.png'
			Button:
				background_normal: 'cases\\csgo_weapon_case.png'

<InvScreen>
	BoxLayout:
		orientation: 'vertical'
		# Верхнее меню
		BoxLayout:
			size_hint: 1, .1
			Button:
				text: 'Кейсы'
				on_press: root.manager.current = 'cases'
			Label:
				text: 'Инвентарь'
			Button:
				text: 'Меню'
				on_press: root.manager.current = 'menu'
		BoxLayout:
			size_hint: 1, .9
			BoxLayout:
				orientation: 'vertical'
				size_hint: .2, 1
				Label:
					text: 'Количество скинов: '
					font_size: 25
					size_hint: 1, 0.1
				Label:
					text: '0'
					font_size: 25
					size_hint: 1, 0.1
				Label:
					text: 'Стоимость инвентаря:'
					font_size: 25
					size_hint: 1, 0.1
				Label:
					text: '0'
					font_size: 25
					size_hint: 1, 0.1
				Widget:
					size_hint: 1, 0.5
				BoxLayout:
					padding: [20, 0, 20, 20]
					spacing: 20
					size_hint: 1, 0.1
					Button:
						text: '<'
						font_size: 25
					Button:
						text: '>'
						font_size: 25
			# Содержимое инвентаря
			GridLayout:
				size_hint: .8, 1
				cols: 5
				rows: 5

<SnakebiteScreen>
	BoxLayout:
		orientation: 'vertical'
		padding: [20, 20, 20, 20]
		spacing: 20
		Button:
			text: 'Назад'
			size_hint: .05, .05
			on_press: root.manager.current = 'cases'
		Button:
			text: 'Открыть кейс'
			font_size: 50
			size_hint: 1, .35
			on_press: root.open_case()
		# Содержимое кейса
		GridLayout:
			size_hint: 1, .6
			cols: 5
			Button:
				text: 'Nova | Windblown'
				background_color: .29, .41, 1, 1
			Button:
				text: 'SG 553 | Heavy Metal'
				background_color: .29, .41, 1, 1
			Button:
				text: 'Glock-18 | Clear Polymer'
				background_color: .29, .41, 1, 1
			Button:
				text: 'M249 | O.S.I.P.R.'
				background_color: .29, .41, 1, 1
			Button:
				text: 'CZ75-Auto | Circaetus'
				background_color: .29, .41, 1, 1
			Button:
				text: 'UMP-45 | Oscillator'
				background_color: .29, .41, 1, 1
			Button:
				text: 'R8 Revolver | Junk Yard'
				background_color: .29, .41, 1, 1
			Button:
				text: 'P250 | Cyber Shell'
				background_color: .53, .28, 1, 1
			Button:
				text: 'Negev | dev_texture'
				background_color: .53, .28, 1, 1
			Button:
				text: 'MAC-10 | Button Masher'
				background_color: .53, .28, 1, 1
			Button:
				text: 'Desert Eagle | Trigger Discipline'
				background_color: .53, .28, 1, 1
			Button:
				text: 'AK-47 | Slate'
				background_color: .53, .28, 1, 1
			Button:
				text: 'MP9 | Food Chain'
				background_color: .83, .17, .9, 1
			Button:
				text: 'XM1014 | XOXO'
				background_color: .83, .17, .9, 1
			Button:
				text: 'Galil AR | Chromatic Aberration'
				background_color: .83, .17, .9, 1
			Button:
				text: 'USP-S | The Traitor'
				background_color: .92, .29, .29, 1
			Button:
				text:  'M4A4 | In Living Color'
				background_color: .92, .29, .29, 1
			Button:
				text:  '★ Перчатки ★'
				background_color: .89, .68, .22, 1
  • Вопрос задан
  • 19 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы