我是 kivy 的新手,每次我尝试 self .button。 bind(),我试过一些 on_press = self。回调,但它不起作用。我什至尝试通过阅读 kivy 的文档来放置 on_click 状态。我也试图寻找类似错误的堆栈溢出,但我找不到任何有效的方法。这让我很痛苦。 这是我的代码
'''
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.image import Image
from kivy.uix.popup import Popup
class Kivy_ui(GridLayout):
def __init__(self,**kwargs):
super().__init__(**kwargs)
self.rows= 2 #defining the rows
self.cols = 3 #defininig the columns
self.image = Image(
source = 'background.jpg'
)
self.add_widget(self.image)
self.label = Label(
text = 'Enter your name'
)
self.add_widget(self.label)
self.text_input = TextInput(
text =''
)
self.add_widget(self.text_input)
self.button = Button(
text = 'submit'
)
self.button.bind(on_click=self.callback) #everytime if button is clicked it moved to call back
self.add_widget(self.button)
#for poppup menu like display
self.popup = Popup(
title='Pop_UP display',
size= (300,400)#size of window,
content = Label(
text='')
)
def callback(self, elem):# this function help to callback evertime, submitted button is pressed
self.popup.content.text = self.text_input.text
self.popup.open()
class demoap(App): #demo app
def build(self):
return Kivy_ui()
if __name__ == '__main__':
demoap().run()
'''
and the output comes as
'''
Traceback (most recent call last):
File "G:\project\game\kivy\kivy_ui.py", line 46, in <module>
demoap().run()
File "C:\Users\DELL\AppData\Local\Programs\Python\Python37\lib\site-packages\kivy\app.py", line 949, in run
self._run_prepare()
File "C:\Users\DELL\AppData\Local\Programs\Python\Python37\lib\site-packages\kivy\app.py", line 919, in _run_prepare
root = self.build()
File "G:\project\game\kivy\kivy_ui.py", line 44, in build
return Kivy_ui()
File "G:\project\game\kivy\kivy_ui.py", line 30, in __init__
self.button.bind(on_click=self.callback)
AttributeError: 'Kivy_ui' object has no attribute 'callback'
'''
答案 0 :(得分:0)
这是一个使用时钟的例子。
希望对您有所帮助。
祝你有美好的一天..
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivymd.app import MDApp
from kivy.clock import Clock
KV = '''
BoxLayout:
Button:
text: "hello world"
'''
class uiApp(MDApp):
def build(self):
print('IM Building here')
self.callback_limit = 5
self.nbr_callback_made = 0
self.screen = Builder.load_string(KV)
self.event = Clock.schedule_interval(self.my_callback, 2)# 2 sec interval before it callback the method
def my_callback(self, dt):
if self.nbr_callback_made == self.callback_limit:
self.event.cancel()
return
print('Inside callback',nbr_callback_made)
self.nbr_callback_made += 1
uiApp().run()```
答案 1 :(得分:0)
您收到错误消息 'Kivy_ui' object has no attribute 'callback'
,因为您对 callback
的定义在 __init__()
方法中,这意味着没有 self.callback
。只需取消缩进 callback
的整个定义,使其不属于 __init__()
。