我是一个新的程序员(和第一次stackoverflow海报),所以请纠正我,如果我使用的术语不正确,或在礼仪或适当的编码风格的任何其他错误步骤。在
我试着写一个游戏,你画瓷砖到你的瓷砖架上,然后在板上玩。我已经写了一个游戏,没有图形通过文字输入。现在我想用Kivy制作一个图形界面。在
我的问题之一是小部件的定位。我想把我的机架部件放在屏幕x轴的中心。我可以让它在那里画一个矩形,让它看起来像是我想要的位置,但是它的x位置是(正如你可能猜到的)0。我想我的部分问题是我已经把一个游戏对象传递给了我的小部件并使用了一个符号列表(游戏符号)在一个init方法中,我尝试用标签(text=symbol)加载createtile小部件,然后将它们加载到机架上。正如您可能已经猜到的,我的瓷砖也没有正确定位。在
我也可能只是对Kivy的定位和布局有一个基本的误解,如果是,请教育我。在
谢谢你, 悬崖
import kivy
kivy.require('1.7.0')
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.scatter import Scatter
from kivy.uix.label import Label
kv_Game= '''
<TileWidget>:
size_hint: None, None
size: 50,50
canvas.before:
Color:
rgba: 0.5,0.5,1,0.3
Rectangle:
size: self.width, self.height
canvas.after:
Line:
rectangle: self.x, self.y, self.width, self.height
dash_offset: 5
dash_length: 3
<RackWidget>:
size_hint: None, None
size: 350, 50
pos_hint: {'center_x': 0.5}
y: 75
canvas.after:
Color:
rgba: 1,0,0,0.5
Line:
rectangle: self.x, self.y, self.width, self.height
'''
Builder.load_string(kv_Game)
class Game(FloatLayout):
def __init__(self, **kwargs):
super(Game, self).__init__(**kwargs)
self.symbols = ['!','@','#','$','%','^','&']
self.rackWidget = RackWidget(self)
self.add_widget(self.rackWidget)
class TileWidget(Scatter):
def __init__(self, symbol="?", **kwargs):
super(TileWidget, self).__init__(**kwargs)
tileLabel = Label(text=symbol, size_hint=(None,None), size=(50,50))
self.add_widget(tileLabel)
class RackWidget(FloatLayout):
def __init__(self, game, **kwargs):
super(RackWidget, self).__init__(**kwargs)
print("TileRackWidget pos:", self.pos)
x, y = self.pos
for symbol in game.symbols:
tileWidget = TileWidget(symbol=symbol, pos= (x,y))
self.add_widget(tileWidget)
print("tileWidget pos:", tileWidget.pos)
x+=50
class GameTest1App(App):
def build(self):
game = Game()
return game
if __name__=="__main__":
GameTest1App().run()
当您创建} 。
RackWidget
实例时,pos
尚未设置为可用值。当__init__
正在运行时,该小部件尚未添加到Game
小部件中,因此它没有父部件,也没有定位信息。您可以通过绑定到RackWidget.pos
中的更改来解决此问题,但有一种更简单的方法:^{RelativeLayout
的每个子级的位置将基于布局本身的位置。在以下是
RackWidget
的修改版本,使用RelativeLayout
:相关问题 更多 >
编程相关推荐