在 GridLayout 中旋转 'complex' kivy 小部件
Rotate 'complex' kivy widget inside a GridLayout
我目前正在用 kivy (1.9.1) 编写一个应用程序,由于 GridLayout (2 * 2),它被分成 4 个小部件。我搜索把上面两个翻转180°
我尝试使用 ScatterLayout 来实现,但单元格跳到右下角...
我试过在 Widget 中插入 Scatter,但我没有找到正确设置大小的方法。
我阅读使用以下代码来优化资源消耗:
canvas.before:
PushMatrix
Rotate:
angle: 180
origin: self.center
canvas.after:
PopMatrix
乍一看可以,但不幸的是 'touching areas' 没有旋转。
我发现的唯一两件事是将 ScatterLayout 和 AnchorLayout 放在里面,或者对每个 child...
使用以前的代码
我认为有更好的解决方案,但到目前为止我还没有找到。
请查看下面我的 .kv 文件,了解我试验过的内容的汇编:
GridLayout:
cols: 2
rows: 2
AnchorLayout:
ScatterLayout:
center: self.parent.center
do_rotation: False
do_translation: False
do_scale: False
rotation: 180
GridLayout:
cols: 2
Button:
text: '1.1'
Button
text: '1.2'
Button:
text: '2'
GridLayout:
size: self.parent.size
center: self.parent.center
cols: 3
Button:
canvas.before:
PushMatrix
Rotate:
angle: 180
origin: self.center
canvas.after:
PopMatrix
text: '3.1'
Button:
canvas.before:
PushMatrix
Rotate:
angle: 180
origin: self.center
canvas.after:
PopMatrix
text: '3.2'
GridLayout:
size: self.parent.size
center: self.parent.center
rows: 2
canvas.before:
PushMatrix
Rotate:
angle: 180
origin: self.center
canvas.after:
PopMatrix
Button:
text: '3.3.1'
Button:
text: '3.3.2'
Button:
text: '4'
.py文件无非就是:
from kivy.app import App
class MainApp(App):
pass
if __name__ == '__main__':
MainApp().run()
提前致谢。
是的,您可以为此使用散点图。
试试这个:
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder
KV = '''
MyGrid:
rows: 2
cols: 2
BoxLayout:
id: w1
Scatter:
size: w1.size
rotation: 180
do_rotation: False
Button:
size: w1.size
text: "Label1"
BoxLayout:
id: w2
Scatter:
size: w2.size
rotation: 180
do_rotation: False
Button:
size: w2.size
text: "Label2"
Button:
text: "Label3"
Button:
text: "Label4"
'''
class MyGrid(GridLayout):
pass
class MyApp(App):
def build(self):
return Builder.load_string(KV)
MyApp().run()
我目前正在用 kivy (1.9.1) 编写一个应用程序,由于 GridLayout (2 * 2),它被分成 4 个小部件。我搜索把上面两个翻转180°
我尝试使用 ScatterLayout 来实现,但单元格跳到右下角... 我试过在 Widget 中插入 Scatter,但我没有找到正确设置大小的方法。
我阅读使用以下代码来优化资源消耗:
canvas.before:
PushMatrix
Rotate:
angle: 180
origin: self.center
canvas.after:
PopMatrix
乍一看可以,但不幸的是 'touching areas' 没有旋转。
我发现的唯一两件事是将 ScatterLayout 和 AnchorLayout 放在里面,或者对每个 child...
使用以前的代码我认为有更好的解决方案,但到目前为止我还没有找到。
请查看下面我的 .kv 文件,了解我试验过的内容的汇编:
GridLayout:
cols: 2
rows: 2
AnchorLayout:
ScatterLayout:
center: self.parent.center
do_rotation: False
do_translation: False
do_scale: False
rotation: 180
GridLayout:
cols: 2
Button:
text: '1.1'
Button
text: '1.2'
Button:
text: '2'
GridLayout:
size: self.parent.size
center: self.parent.center
cols: 3
Button:
canvas.before:
PushMatrix
Rotate:
angle: 180
origin: self.center
canvas.after:
PopMatrix
text: '3.1'
Button:
canvas.before:
PushMatrix
Rotate:
angle: 180
origin: self.center
canvas.after:
PopMatrix
text: '3.2'
GridLayout:
size: self.parent.size
center: self.parent.center
rows: 2
canvas.before:
PushMatrix
Rotate:
angle: 180
origin: self.center
canvas.after:
PopMatrix
Button:
text: '3.3.1'
Button:
text: '3.3.2'
Button:
text: '4'
.py文件无非就是:
from kivy.app import App
class MainApp(App):
pass
if __name__ == '__main__':
MainApp().run()
提前致谢。
是的,您可以为此使用散点图。
试试这个:
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder
KV = '''
MyGrid:
rows: 2
cols: 2
BoxLayout:
id: w1
Scatter:
size: w1.size
rotation: 180
do_rotation: False
Button:
size: w1.size
text: "Label1"
BoxLayout:
id: w2
Scatter:
size: w2.size
rotation: 180
do_rotation: False
Button:
size: w2.size
text: "Label2"
Button:
text: "Label3"
Button:
text: "Label4"
'''
class MyGrid(GridLayout):
pass
class MyApp(App):
def build(self):
return Builder.load_string(KV)
MyApp().run()