【发布时间】:2020-10-17 20:30:39
【问题描述】:
我在从类(此处为 SecondWindow)访问小部件 ID 时遇到问题。这个类有一个 id 为name_btn 的按钮,它触发一个弹出窗口,其中有一个TextInput 小部件,id 为my_field。我想将SecondWindow 中按钮的text 更改为用户在文本输入中写入的任何内容...我该怎么做。
我尝试使用 self.parent.ids.name_btn.text 访问按钮的文本,但它给了我一个错误声明 AttributeError: 'super' object has no attribute '__getattr__'。
我的代码如下>>
main.py
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()
和我的.kv
<time_intrvl>:
my_field : my_field
TextInput:
id : my_field
multiline : False
pos_hint : {'x':0.1 , 'top': 0.74}
size_hint : None,None
size : 200,60
font_size : 26
Button:
size_hint : None , None
text : 'Done'
size : 80,26
font_size : 14
pos_hint : {'x':0.8,'top':0.18}
on_release:
root.yeah()
WindowManager:
Main:
SecondWindow:
<Main>:
name : 'main'
GridLayout:
cols : 1
Button:
text : 'Go to SecondWindow'
on_release:
app.root.current = 'sec_wind'
<SecondWindow>
name : 'sec_wind'
name_btn : name_btn
GridLayout:
cols : 1
Button:
id : name_btn
text:'Enter Text'
on_release:
root.pop_()
`
【问题讨论】:
标签: python class popup kivy screen