当前位置: 首页 > 知识库问答 >
问题:

Kivy中的中心部件

阙俊友
2023-03-14

我正在学习使用Kivy,所以我浏览了Pong教程,开始乱搞代码。所以,我去掉了所有的东西,除了弹跳球,并决定根据需要生成多个球。我遇到的问题是,虽然当应用程序已经运行时,我可以将球放在我想要的地方(例如,在触摸时添加球可以正常工作),但当我在应用程序build()中添加球时,球的位置不正确。这是我的密码。放置在接触位置的球,正确地从中心开始。但是build()中添加的球从左下角开始。为什么?我想添加更多具有不同属性的移动小部件,但我似乎不知道如何将它们放置在应用程序启动时。

#:kivy 1.0.9
<World>:
    canvas:
        Ellipse:
            pos: self.center
            size: 10, 10

<Agent>:
    size: 50, 50
    canvas:
        Ellipse:
            pos: self.pos
            size: self.size
from random import randint

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import NumericProperty, ReferenceListProperty, ListProperty
from kivy.vector import Vector
from kivy.clock import Clock


class World(Widget):
    agents = ListProperty()

    def add(self):
        agent = Agent()
        agent.center = self.center
        agent.velocity = Vector(4, 0).rotate(randint(0, 360))
        self.agents.append(agent)
        self.add_widget(agent)

    def on_touch_down(self, touch):
        self.add()

    def update(self, dt):
        for agent in self.agents:
            agent.move()
            if agent.y < 0 or agent.top > self.height:
                agent.velocity_y *= -1
            if agent.x < 0 or agent.right > self.width:
                agent.velocity_x *= -1


class Agent(Widget):
    velocity_x = NumericProperty(0)
    velocity_y = NumericProperty(0)
    velocity = ReferenceListProperty(velocity_x, velocity_y)

    def move(self):
        self.pos = Vector(*self.velocity) + self.pos


class WorldApp(App):
    def build(self):
        world = World()
        # add one ball by default
        world.add()
        Clock.schedule_interval(world.update, 1.0/60.0)
        return world


if __name__ == '__main__':
    WorldApp().run()

共有1个答案

黎苑博
2023-03-14

找到了答案。默认的小部件大小是100,100。当我添加初始球时,世界小部件没有呈现,因此具有默认大小。但是可以在Widget构造函数中传递窗口大小。所以将World实例化改为

world = World(size=Window.size)

解决了问题

 类似资料:
  • 我试图在屏幕中间构造一个窗口小部件。我没有使用pos_hint或size_hint,因为我将在以后更改小部件的位置,但是当我构建小部件时,它的大小和位置不正确。这是我的密码: 为什么小部件的大小不等于窗口大小的十分之一,为什么它的中心在窗口的右上角?

  • 我在kivy中添加或删除小部件时遇到一些困难。情况就是这样: 主窗体应该包含三个小部件中的两个,即Widget1、Widget2和Widget3。按下Widget1的按钮,Widget2应该被删除,Widget3应该出现。 这是main.py文件: 这是.kv文件: 在类表单中,我检查Widgets1和2是否为该类的子类: 我得到: 因此,当我尝试删除现有子项并添加新子项时,我得到: 有人能帮忙吗

  • 问题内容: 我正在使用Kivy做proyect,但复选框有问题。起初,我试图像python编码那样做程序(我知道它不是很干净,但是我理解得更多),并且我有了使用此编码的第一个屏幕: 例如,我想选择两个或三个选项,然后像选择类型一样保存到下一个屏幕。如果有人知道该怎么做并为下一个屏幕保存信息,那将对我有很大帮助,因为我拥有所有选项的下一个屏幕代码,但是我想在第一个屏幕中进行预选择,然后仅使用选择了。

  • 我试着用Kivy模仿flappy birds,但目前我的处境很艰难。问题是我不知道如何在视图中创建多个小部件。 现在我的kv文件中有: 目前我能够制作单列,所以问题是如何制作才能有多列?

  • 我正在使用Kivy python库。 我定义了两个小部件。 当程序运行时,我运行第一个小部件。 当按下widgets按钮时,我希望它消失并被第二个widget替换。 这是两个小部件的. kv 我的主python文件运行应用程序,并返回第一个小部件 我的第一个小部件有一个回调。这就是问题代码所属的位置 这里的想法是有一个用户界面管理器。此管理器不像树那样运行UI,而是像列表和堆栈一样运行UI。该列表

  • 问题内容: 我现在正在使用Windows,我想问问是否有什么好的工具可以在Windows中打包适用于Android的kivy应用程序,还是必须使用Linux发行版? 还有反正要为python 3.3.2(最新)使用kivy吗? 问题答案: 我现在正在使用Windows,我想问问是否有什么好的工具可以在Windows中打包适用于Android的kivy应用程序,或者我没有使用Linux发行版? 不幸