我有一个8列的网格布局,我添加了64个按钮。(所以是8x8)。我希望按钮总是二次的,所以我在spot_init()函数中做了这个。
这一切都工作得很好。当我把窗口变小或变大时,屏幕的其余部分会变黑,网格布局停留在角落里。但我希望它居中。
对于leftright来说,它工作得非常好,但是当我试着把它应用到updown上时,它会做一些奇怪的事情,我真的无法解释。
我(也许)发现了一些事情:
- 当我像现在这样做的时候,但是在代码中,由于某种原因,Y坐标是它应该达到的3倍。
- 当我把它除以3,它会变成7倍...
- 如果我在.kv或.py文件中执行此操作,它不会发生变化
- 不使用RelativeLayout移动GridLayout也不起作用(几乎发生同样的事情)
- 其他提问者似乎也有同样的问题(或类似的问题),但他们的修复没有帮助我。
我的.kv文件:
RMainBoard:
<MainBoard>:
cols:8
# height: self.minimum_height
# size_hint_y: None
# size_hint_x: None
<RMainBoard@RelativeLayout>:
pos:(self.width/2-min(self.width/8,self.height/8)*4,self.height/2-(min(self.width/8,self.height/8))*4)
MainBoard:
我的.py文件:
#resize window (NEEDS TO BE AT VERY TOP)
from kivy.config import Config
Config.set('graphics', 'width', '600')
Config.set('graphics', 'height', '600')
from kivy.app import App
from kivy.core.window import Window
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.metrics import dp
from kivy.properties import NumericProperty
class MainBoard(GridLayout):
spots = []
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.spot_init()
def on_size(self,*args):
for spot in self.spots:
spot_size = min(self.width/8,self.height/8)
print(min(self.width/8,self.height/8))
spot.height = spot_size
spot.width = spot_size
def spot_init(self):
for i in range(0,64):
self.spots.append(Button(size_hint=(None,None),height=self.height/8,width=self.width/8))
self.add_widget(self.spots[i])
class TestApp(App):
pass
TestApp().run()
非常感谢〈3
1条答案
按热度按时间a6b3iqyw1#
您可以使用
kv
来完成此操作,而不是编写自己的代码来定位GridLayout
。下面是代码的修改版本,它可以完成此操作:注意,我在python代码中包含了
kv
作为字符串,这只是为了我自己的方便,它也可以包含在kv
文件中。我定义了一个
SquareButton
类,以及kv
中的<SquareButton>
规则,该规则保持SquareButton
为正方形,在spot_init()
方法中创建的Buttons
现在是SquareButtons
。