这是我的kv文件,我在其中创建了一个自定义小部件,以及kv本身中的两个根变量name和date。
<Entry@Widget>:
name: ''
date: ''
size_hint: (None, None)
canvas.before:
Color:
rgba: 1, 1, 1, .4
Rectangle:
pos: self.pos
size: self.size
Color:
rgba: 0, 0, 0, 1
Label:
text: root.name[0:1]
color: 41/255, 128/255, 185/255, 1
pos: root.pos
font_size: sp(50)
Label:
text: root.name[1:]
color: 41/255, 128/255, 185/255, 1
pos: root.x+sp(80), root.y+sp(8)
font_size: sp(30)
Label:
text: root.date
color: 17/255, 80/255, 122/255, 1
pos: root.x+sp(50), root.y-sp(10)
font_size: 10
还有一件事。我在python代码中替换了如下所示的Entry小部件的on_touch_down事件:
class Entry(RelativeLayout):
def on_touch_down(self, touch):
super(Entry, self).on_touch_down(touch)
popup = Mypopup()
popup.open()
return True
现在在我的主屏幕中,我正在动态添加小部件,所以我让我用python输入代码,如下所示:
class MainScreen(FloatLayout):
def __init__(self, **kargs):
super(MainScreen, self).__init__(**kargs)
layout = GridLayout(cols=1, spacing=10, size_hint_y=None)
layout.bind(minimum_height=layout.setter('height'))
for i in range(100):
entry = Entry(name='Facebook', date='30/21/2', size=(Window.width, sp(100)))
layout.add_widget(entry)
scroll = ScrollView(size_hint=(1, None), height=Window.height)
scroll.add_widget(layout)
self.add_widget(scroll)
但它给了我一个错误,说:
File "C:\Users\Himanshu Pharawal\AppData\Local\Programs\Python\Python36\lib\site-packages\kivy\app.py", line 802, in run
root = self.build() File "main.py", line 47, in build
return MainScreen() File "main.py", line 38, in __init__
entry = Entry(name='Facebook', date='30/21/2', size=(Window.width, sp(100))) File "main.py", line 21, in __init__
super(Entry, self).__init__(*args, **kargs) File "C:\Users\Himanshu Pharawal\AppData\Local\Programs\Python\Python36\lib\site-packages\kivy\uix\relativelayout.py", line 265, in __init__
super(RelativeLayout, self).__init__(**kw) File "C:\Users\Himanshu Pharawal\AppData\Local\Programs\Python\Python36\lib\site-packages\kivy\uix\floatlayout.py", line 65, in __init__
super(FloatLayout, self).__init__(**kwargs) File "C:\Users\Himanshu Pharawal\AppData\Local\Programs\Python\Python36\lib\site-packages\kivy\uix\layout.py", line 76, in __init__
super(Layout, self).__init__(**kwargs) File "C:\Users\Himanshu Pharawal\AppData\Local\Programs\Python\Python36\lib\site-packages\kivy\uix\widget.py", line 337, in __init__
super(Widget, self).__init__(**kwargs) File "kivy\_event.pyx", line 254, in kivy._event.EventDispatcher.__init__ (kivy\_event.c:5332) TypeError: object.__init__() takes no parameters
发布于 2018-06-02 05:31:42
您不能指明您在.py中有一个名为Entry
的继承自FloatLayout
的类,而在.kv中有另一个继承自Widget
的Entry
,首先它不会排除在.kv中创建的条目,您必须做的只是指出您将继续通过<Entry>
实现该类,而不在.kv中执行任何其他内容。
另一方面,name和date属性不会自动识别,您必须将它们分开,如下所示:
main.py
from kivy.app import App
from kivy.core.window import Window
from kivy.metrics import sp
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.scrollview import ScrollView
from kivy.uix.popup import Popup
class Mypopup(Popup):
pass
class Entry(FloatLayout):
def __init__(self, name="", date="", **kwargs):
super(Entry, self).__init__(**kwargs)
self.name = name
self.date = date
def on_touch_down(self, touch):
super(Entry, self).on_touch_down(touch)
popup = Mypopup()
popup.open()
return True
class MainScreen(FloatLayout):
def __init__(self, **kargs):
super(MainScreen, self).__init__(**kargs)
layout = GridLayout(cols=1, spacing=10, size_hint_y=None)
layout.bind(minimum_height=layout.setter('height'))
for i in range(100):
entry = Entry(name='Facebook', date='30/21/2', size=(Window.width, sp(100)))
layout.add_widget(entry)
scroll = ScrollView(size_hint=(1, None), height=Window.height)
scroll.add_widget(layout)
self.add_widget(scroll)
class TestApp(App):
def build(self):
return MainScreen()
if __name__ == '__main__':
TestApp().run()
test.kv:
<Entry>:
name: ''
date: ''
size_hint: (None, None)
canvas.before:
Color:
rgba: 1, 1, 1, .4
Rectangle:
pos: self.pos
size: self.size
Color:
rgba: 0, 0, 0, 1
Label:
text: root.name[0:1]
color: 41/255, 128/255, 185/255, 1
pos: root.pos
font_size: sp(50)
Label:
text: root.name[1:]
color: 41/255, 128/255, 185/255, 1
pos: root.x+sp(80), root.y+sp(8)
font_size: sp(30)
Label:
text: root.date
color: 17/255, 80/255, 122/255, 1
pos: root.x+sp(50), root.y-sp(10)
font_size: 10
https://stackoverflow.com/questions/50650354
复制相似问题