首先是我的main.py代码:
import kivy
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen, SlideTransition
from kivy.properties import ObjectProperty, ListProperty, StringProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.textinput import TextInput
from kivy.uix.popup import Popup
from kivy.core.window import Window
from random import *
class Boxlayout(BoxLayout):
pass
class Textinput(TextInput):
pass
class Variablen():
Spielernamen = []
Beginner = 0
Zweiter = 0
def get_names(self):
Name1 = Namensabfrage.name_1.text
Name2 = Namensabfrage.name_2.text
self.Spielernamen.append(Name1)
self.Spielernamen.append(Name2)
print(Variablen.Spielernamen)
class Namensabfrage(Screen):
name_1 = ObjectProperty()
name_2 = ObjectProperty()
class Anzeige(Screen, Variablen):
Spieler1 = str(Variablen.Spielernamen[0])
Spieler2 = str(Variablen.Spielernamen[1])
class Manager(ScreenManager):
namensabfrage = ObjectProperty(None)
anzeige = ObjectProperty(None)
class ScreensApp(App):
def build(self):
m = Manager(transition=SlideTransition())
return m
if __name__ == "__main__":
ScreensApp().run()
然后我的Screen.kv文件:
<Namensabfrage>:
name_1: name1
name_2: name2
Boxlayout:
orientation: 'vertical'
padding: 50
spacing: 50
Label:
text: "gebt hier eure Namen ein"
Textinput:
id: name1
size_hint: (1, .3)
text: ""
multiline: False
Textinput:
id: name2
size_hint: (1, .3)
text: ""
multiline: False
Button:
text: "Bestätigen"
size_hint:(1,.4)
on_press: root.Variablen.get_names()
Button:
size_hint: (1, .5)
text: "Start"
on_press: root.manager.current = "Screen2"
<Anzeige>:
Boxlayout:
orientation: 'vertical'
spacing: 50
Label:
text: root.Spieler1
Label:
text: root.Spieler2
<Manager>:
id: screen_manager
namensabfrage: Namensabfrage
anzeige: Anzeige
Namensabfrage:
id: Namensabfrage
name: "Screen1"
manager: screen_manager
Anzeige:
id: Anzeige
name: "Screen2"
manager: screen_manager
我现在的问题是:
我想在屏幕“Anzeige”中显示列表元素“Spielernamen”。但是,如果我运行程序,它表示列表索引超出范围。我知道列表索引超出范围。但我想在此列表中添加名称为“get_names()”的函数。 所以首先我要获取名称,然后我想在另一个屏幕中显示名称。
我该怎么做?
我希望你理解我的问题
提前谢谢!!
答案 0 :(得分:0)
发生此错误是因为在实例化类时,列表Variablen.Spielernamen [0]为空。
对IndexError的修复,添加方法on_pre_enter,如下所示:
class Anzeige(Screen, Variablen):
def on_pre_enter(self):
Spieler1 = str(Variablen.Spielernamen[0])
Spieler2 = str(Variablen.Spielernamen[1])
修复IndexError时,会出现更多错误。请参阅我的示例,了解所有错误的完整解决方案。
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen, SlideTransition
from kivy.properties import ObjectProperty, ListProperty, StringProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.textinput import TextInput
from kivy.uix.popup import Popup
from kivy.core.window import Window
from random import *
class Boxlayout(BoxLayout):
pass
class Textinput(TextInput):
pass
class Variablen():
Spielernamen = []
Beginner = 0
Zweiter = 0
def get_names(self, Namensabfrage):
Name1 = Namensabfrage.name_1.text
Name2 = Namensabfrage.name_2.text
self.Spielernamen.append(Name1)
self.Spielernamen.append(Name2)
print(Variablen.Spielernamen)
class Namensabfrage(Screen):
name_1 = ObjectProperty()
name_2 = ObjectProperty()
def save_names(self):
vars = Variablen()
vars.get_names(self)
class Anzeige(Screen, Variablen):
Spieler1 = StringProperty("")
Spieler2 = StringProperty("")
def on_pre_enter(self):
self.Spieler1 = str(Variablen.Spielernamen[0])
self.Spieler2 = str(Variablen.Spielernamen[1])
class Manager(ScreenManager):
namensabfrage = ObjectProperty(None)
anzeige = ObjectProperty(None)
class ScreensApp(App):
def build(self):
m = Manager(transition=SlideTransition())
return m
if __name__ == "__main__":
ScreensApp().run()
#:kivy 1.10.0
<Namensabfrage>:
name_1: name1
name_2: name2
Boxlayout:
orientation: 'vertical'
padding: 50
spacing: 50
Label:
text: "gebt hier eure Namen ein"
Textinput:
id: name1
size_hint: (1, .3)
text: ""
multiline: False
Textinput:
id: name2
size_hint: (1, .3)
text: ""
multiline: False
Button:
text: "Bestätigen"
size_hint:(1,.4)
on_press: root.save_names()
Button:
size_hint: (1, .5)
text: "Start"
on_press: root.manager.current = "Screen2"
<Anzeige>:
Boxlayout:
orientation: 'vertical'
spacing: 50
Label:
text: root.Spieler1
Label:
text: root.Spieler2
<Manager>:
id: screen_manager
namensabfrage: Namensabfrage
anzeige: Anzeige
Namensabfrage:
id: Namensabfrage
name: "Screen1"
manager: screen_manager
Anzeige:
id: Anzeige
name: "Screen2"
manager: screen_manager