【发布时间】:2019-02-19 09:52:41
【问题描述】:
我有 ModelView 类和屏幕类,当打开模式视图并在更改为第二个屏幕类后在第一个屏幕类上做一些事情但模式关闭不起作用时
/导入模块/
from kivy.app import App
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.properties import StringProperty, partial
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.modalview import ModalView
from kivy.uix.screenmanager import Screen
from kivy.uix.screenmanager import ScreenManager
from kivy.uix.scrollview import ScrollView
from kivy.uix.stacklayout import StackLayout
/*我的滚动视图,用于将按钮放到屏幕1 */
class SView(ScrollView):
def __init__(self, **kwargs):
super(SView, self).__init__(**kwargs)
Clock.schedule_interval(self.update, 1)
self.MM = MyModal()
self.MM.MyButton=self.MyButton
def MyButton(self, *args):
print("Hello")
def MMDismiss(self, *args):
pass
def ModalOpen(self, instance, button, *args):
self.MM.open()
self.MM.MyButton = self.MyButton
self.MMDismiss = self.MM.dismiss
def update(self, *args):
layout = GridLayout(width=480, padding=10, cols=7, spacing=10, size_hint_y=None)
layout.bind(minimum_height=layout.setter('height'))
self.buttons=["One", "Two", "Three","One", "Two", "Three","One", "Two", "Three","One", "Two", "Three","One", "Two", "Three","One", "Two", "Three","One", "Two", "Three","One", "Two", "Three","One", "Two", "Three","One", "Two", "Three"]
for key in self.buttons:
stacklayout = StackLayout(size_hint_y=None, size_hint_x=None, height=130, width=100, orientation='lr-tb')
btn = Button(text=key, size_hint_y=None, size_hint_x=None, height=130, width=100)
stacklayout.add_widget(btn)
btn.bind(on_release=partial(self.ModalOpen, key))
layout.add_widget(stacklayout)
self.clear_widgets()
self.add_widget(layout)
/*当按下screen1的按钮时打开模态*/
class MyModal(ModalView):
text = StringProperty("text")
def __init__(self, **kwargs):
super(MyModal, self).__init__(**kwargs)
self.size_hint = (None, None)
self.size = (200, 200)
self.layout=GridLayout(cols=1,padding=10,spacing=10)
self.layout.add_widget(Label(text=self.text))
self.btn=Button(text="My Button")
self.bind(on_press=self.MyButton)
self.layout.add_widget(self.btn)
self.add_widget(self.layout)
def MyButton(self, *args):
pass
/我的屏幕1/
class Screen1(Screen):
def __init__(self, **kwargs):
super(Screen1, self).__init__(**kwargs)
self.sview=SView()
self.mylayout = GridLayout(cols=1)
self.mylayout.add_widget(self.sview)
self.add_widget(self.mylayout)
self.sview.MyButton = self.MyButton
def MyButton(self, instance, button):
self.manager.current = "screen2"
print("screen 2")
class Screen2(Screen):
def __init__(self, **kwargs):
super(Screen2, self).__init__(**kwargs)
/我的构建器字符串/
Builder.load_string('''
<SM>:
Screen1:
name: "screen1"
Screen2:
name: "screen2"
''')
/我的屏幕管理器/
class SM(ScreenManager):
def __init__(self, **kwargs):
super(SM, self).__init__(**kwargs)
self.current = 'screen1'
/我的应用/
class Main(App):
def __init__(self, **kwargs):
super(Main, self).__init__(**kwargs)
def build(self):
self.title = "MAVA"
self.icon = "./images/logo/logo.png"
return SM()
if __name__ == "__main__":
Main().run()
【问题讨论】:
-
您能否编辑您的问题以包含不起作用的代码。尝试显示尽可能少的代码,同时仍然突出显示问题。如果我们能够复制/粘贴您的代码示例并自己查看错误,那就更好了
-
我会添加我的代码谢谢
标签: kivy