Python Kivy散射z指数
我正在尝试制作一个模拟简单生态系统的kivy应用程序,带有一种交互式地图,可以通过用户拖动来缩放和定位。我实现这一点的第一个方法是使用Kivy散射小部件,它似乎满足了这些要求。下面是我的代码,让它保持简单,只是gui按钮和地图在右边,红色的大矩形:Python Kivy散射z指数,python,user-interface,kivy,Python,User Interface,Kivy,我正在尝试制作一个模拟简单生态系统的kivy应用程序,带有一种交互式地图,可以通过用户拖动来缩放和定位。我实现这一点的第一个方法是使用Kivy散射小部件,它似乎满足了这些要求。下面是我的代码,让它保持简单,只是gui按钮和地图在右边,红色的大矩形: from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.properties import ObjectProperty from kivy.graphi
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.graphics import Rectangle, Color
class GUI(BoxLayout):
board = ObjectProperty(None)
def draw(self):
with self.board.canvas:
Color(1,0,0)
Rectangle(pos=(0,0),size=(300,300))
class TestApp(App):
def build(self):
gui = GUI()
gui.draw()
return gui
if __name__=="__main__":
app = TestApp()
app.run()
和我的.kv文件:
#:kivy 1.0.9
<GUI>:
board: scatter_board
orientation: 'horizontal'
spacing: 30
padding: 30
BoxLayout:
size_hint: 0.25, 1
orientation: 'vertical'
Button:
text: 'Start/Resume'
Button:
text: 'Stop'
Scatter:
id: scatter_board
size_hint: 0.75,1
然而,在这种情况下,当用户在按钮上拖动地图时,就不可能再单击它了,因为单击时不会高亮显示。我试过:
将散布的“自动带到前方”设置为False
使用“散布”和“按钮”父框布局的“索引”属性来操作z索引。
因此,基本上我希望“地图”不在按钮的阴影下,而是在按钮下方。是否有可能通过散射实现这种效果?或者这是一个错误的分散用例,我应该改变方法吗?如果是这样的话,您知道任何类似且可能简单的方法吗?为了达到您想要的结果,您需要在kv文件中使用FloatLayout
<GUI>:
BoxLayout:
Scatter:
Board:
canvas:
Rectangle:
size: (100,300)
BoxLayout:
orientation :"vertical"
Button:
text: "gi"
Button:
text: "gi"
别忘了导入FloatLayout,,
我也在为同样的问题挣扎。 在阅读了上面的答案后,我发现你需要把分散在自己的盒子布局。不要像我一开始做的那样使用散乱的布局,因为这样它就不会做你想做的事情,而是在按钮下面而不是上面 我是这样做的:
# Creating Scatter Class
class TreeWidget(Scatter):
def __init__(self, **kwargs):
super(TreeWidget, self).__init__(**kwargs)
#self.auto_bring_to_front = False
...
class ShowApp(App):
def build(self):
treeBox = BoxLayout()
self.treeWidget = TreeWidget()
treeBox.add_widget(self.treeWidget)
buttonFile = Button(text='File', size_hint=(None, None), size=(60, 30))
buttonFile.bind(on_press=self.chooseFile)
buttonSave = Button(text='Save', size_hint=(None, None), size=(60, 30))
buttonSave.bind(on_press=self.saveFile)
buttonBox = BoxLayout(orientation='horizontal')
buttonBox.add_widget(buttonFile)
buttonBox.add_widget(buttonSave)
boxLayout = BoxLayout(orientation='vertical')
boxLayout.add_widget(treeBox)
boxLayout.add_widget(buttonBox)
return boxLayout
请查看这篇文章,它将按钮/下拉列表放在带有散布小部件的mapview顶部抱歉,我不太明白FloatLayout的作用是什么,因为它不在代码中的任何位置,你能解释一下吗?我删除了它,所以我猜它在这里没有nee,我最初在widgetsSo的定位中使用了它,为了实现这一点,我需要使用FLoatLayout,但在这之后我可以删除它???你可以忽略FLoatLayout,那么实现这一点的实际方法是什么?使用单独的布局,按不同的顺序排列,删除绘图方法???你的回答没有解释它,我只是对它更困惑,你的方式不符合我的需要,因为我需要从.py文件内部在画布上绘制
# Creating Scatter Class
class TreeWidget(Scatter):
def __init__(self, **kwargs):
super(TreeWidget, self).__init__(**kwargs)
#self.auto_bring_to_front = False
...
class ShowApp(App):
def build(self):
treeBox = BoxLayout()
self.treeWidget = TreeWidget()
treeBox.add_widget(self.treeWidget)
buttonFile = Button(text='File', size_hint=(None, None), size=(60, 30))
buttonFile.bind(on_press=self.chooseFile)
buttonSave = Button(text='Save', size_hint=(None, None), size=(60, 30))
buttonSave.bind(on_press=self.saveFile)
buttonBox = BoxLayout(orientation='horizontal')
buttonBox.add_widget(buttonFile)
buttonBox.add_widget(buttonSave)
boxLayout = BoxLayout(orientation='vertical')
boxLayout.add_widget(treeBox)
boxLayout.add_widget(buttonBox)
return boxLayout