Python kivy-Bind按钮生成额外的小部件实例?
我已经创建了两个可以调整大小的Python kivy-Bind按钮生成额外的小部件实例?,python,button,widget,kivy,Python,Button,Widget,Kivy,我已经创建了两个可以调整大小的Scatter小部件,我正在寻找一种方法,每次按下一个按钮时生成更多Scatter小部件(可能最多20个)。我试图编写一个addfunction()并将其绑定到按钮,但它似乎不起作用 我正在寻找一种方法,在出现提示时生成scatter小部件的新实例(以及子小部件Drawer,它有一个canvas以显示其占用的空间) 以下是我的python代码: from kivy.app import App from kivy.uix.widget import Widget
Scatter
小部件,我正在寻找一种方法,每次按下一个按钮时生成更多Scatter
小部件(可能最多20个)。我试图编写一个addfunction()
并将其绑定到按钮
,但它似乎不起作用
我正在寻找一种方法,在出现提示时生成scatter
小部件的新实例(以及子小部件Drawer
,它有一个canvas
以显示其占用的空间)
以下是我的python代码:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.scatter import Scatter
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button
class Scatterer(Scatter):
pass
class Drawer(FloatLayout):
pass
class MainWindowWidget(FloatLayout):
def addfunction(*args):
root = MainWindowWidget()
s = Scatterer()
d = Drawer()
root.add_widget(s)
s.add_widget(d)
print("button is pressed")
class TestApp(App):
def build(self):
return MainWindowWidget()
if __name__ == '__main__':
TestApp().run()
和我的.kv文件:
#:kivy 1.0.9
<MainWindowWidget>
Scatterer:
id: scatter2
size: 80, 80
Drawer:
size: scatter2.size
Scatterer:
id: scatter1
size: 80, 80
Drawer:
size: scatter1.size
Button:
text: 'press'
size_hint: None, None
size: 100, 100
pos: 100, 0
on_release: root.addfunction()
<Scatterer>:
do_rotation: False
size_hint: None, None
size: self.size
canvas.after:
Color:
rgba: 1, 1, 0, 0.5
Rectangle:
size: self.size
pos: self.pos
<Drawer>:
size: self.size
canvas:
Color:
rgba: 0, 1, 0, 0.3
Rectangle:
pos: self.pos
size: self.size
#:kivy 1.0.9
散射体:
id:scatter2
尺码:80,80
出票人:
尺寸:散射2.5毫米
散射体:
id:scatter1
尺码:80,80
出票人:
尺寸:散射1.5毫米
按钮:
文字:“新闻”
大小提示:无,无
尺码:100100
位置:100,0
发布时:root.addfunction()
:
do_旋转:错误
大小提示:无,无
大小:self.size
在下列情况之后:
颜色:
rgba:1,1,0,0.5
矩形:
大小:self.size
pos:self.pos
:
大小:self.size
画布:
颜色:
rgba:0,1,0,0.3
矩形:
pos:self.pos
大小:self.size
root=MainWindowWidget()
您的问题是您编写了这个,然后将新的散点添加到根
,但是再也不会对根做任何操作,因此它永远不会显示出来
您不想将散射体添加到新的MainWindowWidget,而是要添加到当前的一个,其方法正在运行以生成新的散射体。因此,将方法的声明替换为
def addfunction(self, *args):
s = Scatterer()
d = Drawer()
self.add_widget(s)
s.add_widget(d)
print("button is pressed")
谢谢,这很有效,但是
d.size
是1,1
,所以我必须添加s.size=80,80
和d.size=s.size
,才能得到我想要的