如何解决如何使用KIvy中的弹出窗口小部件按钮从类中访问窗口小部件/ ID
我在从类(此处SecondWindow
)访问小部件ID时遇到问题。此类具有一个ID为name_btn
的Button,它将触发一个弹出窗口,该弹出窗口中的ID为TextInput
的窗口小部件。我想将my_field
中按钮的text
更改为用户在textinput中输入的内容...我该怎么做。
我尝试使用self.parent.ids.name_btn.text访问按钮的文本,但这给我一个错误,指出SecondWindow
。
请提供任何帮助,我的代码如下>>
main.py
AttributeError: 'super' object has no attribute '__getattr__'
和my.kv
import kivy
import kivymd
kivy.require('1.10.1')
from kivymd.app import MDApp
from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.lang import Builder
from kivy.properties import ObjectProperty
from kivy.uix.popup import Popup
from kivy.uix.floatlayout import FloatLayout
class Main(Screen):
pass
class SecondWindow(Screen):
name_btn = ObjectProperty(None)
def pop_(self):
pop_up()
class WindowManager(ScreenManager):
pass
class time_intrvl(FloatLayout):
my_field = ObjectProperty(None)
def yeah(self):
self.parent.ids.name_btn.text = self.my_field.text
class ExamPortal(MDApp):
def build(self):
kv = Builder.load_file('my.kv')
return kv
def pop_up():
pop_window = time_intrvl()
PopUpWindow = Popup(title = 'Enter Time',content = pop_window,size_hint = (0.5,0.3))
PopUpWindow.open()
if __name__ == "__main__":
ExamPortal().run()
`
解决方法
进行一些小的更改即可得到您想要的工作。修改pop_up()
以返回PopUpWindow
,以便可以将其关闭:
def pop_up():
pop_window = time_intrvl()
PopUpWindow = Popup(title = 'Enter Time',content = pop_window,size_hint = (0.5,0.3))
PopUpWindow.open()
return PopUpWindow
然后修改SecondWindow
以保留对PopUpWindow
的引用:
class SecondWindow(Screen):
name_btn = ObjectProperty(None)
def pop_(self):
self.popup = pop_up()
最后,修改time_intrvl
来修改Button文本并关闭PopUpWindow
:
class time_intrvl(FloatLayout):
my_field = ObjectProperty(None)
def yeah(self):
second_window = MDApp.get_running_app().root.get_screen('sec_wind')
second_window.name_btn.text = self.my_field.text
second_window.popup.dismiss()
以上代码使用MDApp.get_running_app()
获取对App
的引用,然后获取root
(即App
)中的WindowManager
。然后,它使用get_screen()
方法获取对SecondWindow
的引用。通过该引用,我们可以更改Button文本并关闭PopUpWindow
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。