[英]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
,因此它不會對您的代碼產生太大影響。
並且您的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.