【发布时间】:2023-02-04 05:51:43
【问题描述】:
我有一个带有 8 列的 GridLayout,我添加了 64 个按钮。 (所以 8x8)。 我希望按钮始终是二次方的,所以我在我的 spot_init() 函数中做了它。
这一切都很好。当我使窗口变小或变大时,屏幕的其余部分变黑并且 GridLayout 留在角落。但我希望它居中。
对于 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
【问题讨论】:
-
“我希望按钮始终是二次方的”是什么意思?你想要固定尺寸
Buttons吗?它们必须总是方形的吗? -
尺寸不固定,但按钮的长度应与高度相等。 (所以你可以说“固定比例,但不是固定大小”
标签: python windows kivy kivy-language grid-layout