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

在kivy中添加小部件

宋志学
2023-03-14

我试图在屏幕中间构造一个窗口小部件。我没有使用pos_hint或size_hint,因为我将在以后更改小部件的位置,但是当我构建小部件时,它的大小和位置不正确。这是我的密码:

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.widget import Widget
from kivy.graphics import *
from kivy.clock import Clock


class Sprite(Widget):

    def __init__(self, **kwargs):
        super(Sprite, self).__init__(**kwargs)
        Clock.schedule_interval(self.update_canvas, 1.0/60)

    def update_canvas(self, dt):
        with self.canvas:
            Rectangle(size=self.size, pos=self.pos)


class RootWidget(FloatLayout):
    def __init__(self, **kwargs):
        super(RootWidget, self).__init__(**kwargs)
        self.add_widget(Sprite(
            size=(Window.width*0.1, Window.height*0.1),
            center=(Window.width*0.5, Window.height*0.5)
        ))


class MyApp(App):
    def build(self):
        app = RootWidget()
        return app

if __name__=="__main__":
    MyApp().run()

为什么小部件的大小不等于窗口大小的十分之一,为什么它的中心在窗口的右上角?

共有1个答案

谢旭
2023-03-14

size提示默认为一个值,除非您显式定义它,并且它优先于size属性。您可能不想使用“大小提示”功能,但除非禁用该功能,否则默认情况下将覆盖手动设置的大小。尝试添加以下修改,并比较有无大小提示行的结果:

    self.add_widget(Sprite(
        size_hint=(None,None),
        size=(Window.width*0.1, Window.height*0.1),
        center=(Window.width*0.3, Window.height*0.5)
    ))

您可以通过使用检视器:pythonmyscript.py-m检视器并在kivy窗口中点击控件E来查看设置的实际尺寸

参考:http://kivy.org/docs/api-kivy.modules.inspector.html

中心是(x宽度/.2,y高度/.2)的别名,但宽度和高度默认为100。在创建时,这些默认测量值用于反向计算,以便在您拨打电话时设置x和y,因此,如果您的高度和宽度与100不同,那么您将被差异抵消。实例化时直接使用x和y(即pos=(...)),而不是center。

 类似资料:
  • 我想问一下,我如何在我的应用程序中动态添加一些小部件,一个接一个,而不是一次添加完。这些小部件被添加到包含命令的for循环中,并由按钮触发。所以我想知道是否有办法在执行结束时逐渐显示输出,而不是一次显示完。起初,我试图在for循环中添加延迟,但恐怕这与每次构建输出的方式有关。 编辑:嗯,似乎我没有很好地理解和的用法,所以我对他们(或time.sleep)的尝试没有成功在所有。但显然,这是我问题的解

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

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

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

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

  • 我在刷新小部件的BoxLayout时遇到了问题,方法是删除它们,然后根据列表“组”重新构建小部件。在EditDeviceGroups屏幕上,“创建”按钮应向列表中添加一个元素,并将用户转发到GroupTemplateScreen,确实如此。 当用户使用“后退”按钮返回到EditDeviceGroups屏幕时,会出现此问题。当时,我认为on_enter方法将刷新小部件以包含新元素,但列表中没有显示任