Kivy:ScreenManager问题

时间:2018-01-27 21:48:58

标签: python python-3.x kivy

我正在与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()

1 个答案:

答案 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