我正在与Kivy的屏幕管理器功能进行斗争。我想设置它以便我可以在屏幕之间转换,但是我无法理解文档。我想我可能会误解,因为我对课程不是很熟悉。
尝试运行此代码会导致崩溃。 它给出了错误消息:
File "kivy\_event.pyx", line 254, in kivy._event.EventDispatcher.__init__ (kivy\_event.c:5332)
TypeError: object.__init__() takes no parameters
我宁愿不要使用kivy语言,请帮助我理解如何在python 3中完成这项工作。
"""
Python 3.6.4
Kivy 1.10.0
Combines various .py files and
allows the game to run.
"""
__author__ = "RidiculousName"
__date__ = "Jan. 2018"
import sys
from kivy.app import App
from kivy.config import Config
from kivy.uix.image import Image
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import ScreenManager, Screen
class MainMenu(FloatLayout):
def __init__(self, **kwargs):
super(MainMenu, self).__init__(**kwargs)
# declares widget buttons
background = Image(source="Img\\BG.png",
pos=(0, 0))
start_button = Button(pos=(25, 75),
background_normal="Img\\Start.png",
background_down="Img\\Start_Down.png",
size_hint=(.1, .1))
load_button = Button(pos=(225, 75),
background_normal="Img\\Load.png",
background_down="Img\\Load_Down.png",
size_hint=(.1, .1))
options_button = Button(pos=(425, 75),
background_normal="Img\\Options.png",
background_down="Img\\Options_Down.png",
size_hint=(.15, .1))
quit_button = Button(pos=(708, 75),
background_normal="Img\\Quit.png",
background_down="Img\\Quit_Down.png",
size_hint=(.1, .1))
quit_button.bind(on_press=sys.exit)
# Adds widgets in order
self.add_widget(background)
self.add_widget(start_button)
self.add_widget(load_button)
self.add_widget(options_button)
self.add_widget(quit_button)
class BanditKing(App, ScreenManager):
def build(self, **kwargs):
super(BanditKing, self).__init__(**kwargs)
sm = ScreenManager
sm.add_widget(ScreenManager(name="MainMenu"))
self.title = "Bandit King"
self.icon = "Window_Icon.png"
return sm
def main():
Config.set("graphics", "width", "1600")
Config.set("graphics", "height", "900")
Config.write()
BanditKing().run()
if __name__ == "__main__":
main()
答案 0 :(得分:0)
您添加到ScreenManager
的小部件应为Screen
类型。因此MainMenu
应该Screen
而不是FloatLayout
。 '屏幕'是RelativeLayout
,因此它不应该对您的代码产生太大影响。
您的BanditKing
班级build()
应该创建一个ScreenManager
并将其返回,而不是将其扩展:
class BanditKing(App):
def build(self, **kwargs):
super(BanditKing, self).__init__(**kwargs)
sm = ScreenManager()
sm.add_widget(MainMenu(name="MainMenu"))
self.title = "Bandit King"
self.icon = "Window_Icon.png"
return sm