簡體   English   中英

Kivy:ScreenManager問題

[英]Kivy: ScreenManager Issues

我正在努力使用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()

您添加到ScreenManager的小部件應為Screen 因此MainMenu應該擴展Screen而不是FloatLayout “屏幕”是一個RelativeLayout ,因此它不會對您的代碼產生太大影響。

並且您的BanditKingbuild()應該創建一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM