from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanger import ScreenManager, Screen
Builder.load_string("""
<MenuScreen>:
BoxLayout:
FloatLayout:
Image:
id: homebackg
pos: 0, 0
source: "dark.png"
<SettingsScreen>:
BoxLayout:
FloatLayout:
Image:
id: settingsbackg
pos: 0, 0
source: "dark.png"
Button:
text: ""
color: 1.0, 1.0, 1.0, 0.0
on_press:
root.buttonclick()
""")
class MenuScreen(Screen):
def darkmode(self):
self.ids.homebackg.source = "dark.png"
def litemode(self):
self.ids.homebackg.source = "lite.png"
class SettingsScreen(Screen):
def darkmode(self):
self.ids.settingsbackg.source = "dark.png"
def litemode(self):
self.ids.settingsbackg.source = "lite.png"
def buttonclick(self):
file = open("stat.txt", "r")
themestat = file.read()
file.close()
if themestat == "lite":
SettingsScreen.darkmode(self)
MenuScreen.darkmode(self)
file = open("stat.txt", "w")
file.write("dark")
file.close()
elif themestat == "dark":
SettingsScreen.litemode(self)
MenuScreen.litemode(self)
file = open("stat.txt", "w")
file.write("lite")
file.close()
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))
class MyApp(App):
def build(self):
return sm
if __name__ == '__main__':
MyApp().run()
假设我已经正确地完成了屏幕转换,没有添加代码来减少代码的体积,我对从设置屏幕更改菜单屏幕的背景有问题。这是为黑暗模式,你看,提前感谢。 从SettingsScreen执行MenuScreen.darkmode(Self)时未定义Self
您的问题是,您正在将屏幕对象添加到屏幕管理器(并且您将只看到这些对象),然后您正在创建新对象并在其中进行更改。因此,由于您使用的是全局变量,最简单的解决方案是:
在类内部,您可以对它们进行更改,如:
另外,“self”表示类的对象,在Python中,self用于从该类中定义的函数访问类变量和函数。在这里,您不需要将“self”发送到另一个类,因为您正在将SettingsScreen类的对象发送到MenuScreen darkmode函数,并且不做任何处理。如果要发送对象,应该有:
相关问题 更多 >
编程相关推荐