Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Kivy-如何在.kv文件中找到小部件的路径_Python_Kivy - Fatal编程技术网

Python Kivy-如何在.kv文件中找到小部件的路径

Python Kivy-如何在.kv文件中找到小部件的路径,python,kivy,Python,Kivy,在我的python代码中,我能够使用self.canvas.before在.kv文件中定义的小部件中画一条线 然后,在.kv中,我将小部件移动到TabbedPanelItem中,它不再正常工作 self.canvas.before不是正确的路径,我应该使用什么替代?正确的道路是什么 一般来说,我如何计算层次结构?.kv文件中的那些对象是由构建器创建的(如果我的理解是正确的),那么如何将python代码绑定到构建器创建的对象。 谢谢你的帮助 main.py: class SampBoxLayout

在我的python代码中,我能够使用self.canvas.before在.kv文件中定义的小部件中画一条线

然后,在.kv中,我将小部件移动到TabbedPanelItem中,它不再正常工作

self.canvas.before不是正确的路径,我应该使用什么替代?正确的道路是什么

一般来说,我如何计算层次结构?.kv文件中的那些对象是由构建器创建的(如果我的理解是正确的),那么如何将python代码绑定到构建器创建的对象。 谢谢你的帮助

main.py:

class SampBoxLayout(BoxLayout):
    def __init__(self, **kwargs):
        super(SampBoxLayout, self).__init__(**kwargs)
        with self.canvas.before:
            self.myline=Line(points=(100,100,400,500), close=False, width=2)
主电压(千伏)

SampBoxLayout:
<SampBoxLayout>:
    orientation: "vertical"
    padding: 0
    spacing: 0
    TabbedPanel:
        do_default_tab: False
        TabbedPanelItem:
            text: "noc_clk"
            BoxLayout:
                orientation: "vertical"
                Widget:
                    height: "440dp"
                    size_hint_y: None
                    canvas:
                        Color:
                            rgba: 0, 0, 0, 0.5
                TabbedPanel:
                    do_default_tab: False
                    TabbedPanelItem:
                        text: "Node0"
                        BoxLayout:
                            orientation: "horizontal"
SampBoxLayout:
:
方向:“垂直”
填充:0
间距:0
选项卡面板:
do_default_选项卡:False
选项卡式面板项目:
正文:“noc_clk”
盒子布局:
方向:“垂直”
小装置:
高度:“440dp”
尺寸提示:无
画布:
颜色:
rgba:0,0,0,0.5
选项卡面板:
do_default_选项卡:False
选项卡式面板项目:
文本:“Node0”
盒子布局:
方向:“水平”

事实上,即使添加了kv文件,您的应用程序仍能正常工作。这条线正在SampBoxLayout的画布上绘制,但不可见,因为每个小部件的不透明度为1.0,即不透明。下面的示例,为了显示绘制的线条,我在
选项卡面板下添加了
不透明度=0.5

层次结构/路径

Kv语言有三个特定的关键字:

应用程序:始终引用应用程序的实例

root:指当前规则中的基本小部件/模板

self:始终参考当前小部件

自我

关键字self引用“当前小部件实例”:

Button:
    text: 'My state is %s' % self.state
根目录

此关键字仅在规则定义中可用,表示 规则的根小部件(规则的第一个实例):

方法1
  • 在类级别声明ObjectProperty,并将其连接到在kv文件中创建的对象的
    id
    。这是最佳实践方法
main.py 主电压(千伏) 主电压(千伏)
SampBoxLayout:
:
方向:“垂直”
填充:0
间距:0
选项卡面板:
不透明度:0.5
do_default_选项卡:False
选项卡式面板项目:
正文:“noc_clk”
盒子布局:
方向:“垂直”
小装置:
高度:“440dp”
尺寸提示:无
画布:
颜色:
rgba:0,0,0,0.5
选项卡面板:
do_default_选项卡:False
选项卡式面板项目:
文本:“Node0”
盒子布局:
方向:“水平”
输出

您是否尝试过使用:
os.listdir(…)
os.walk(…)
<MyWidget>:
    custom: 'Hello world'
    Button:
        text: root.custom
Label:
    text: app.name
from kivy.properties import ObjectProperty


class SampBoxLayout(BoxLayout):
    tp = ObjectProperty(None)
<SampBoxLayout>:
    tp: tp
    orientation: "vertical"
    padding: 0
    spacing: 0

    TabbedPanel:
        id: tp
        opacity: 0.5
from kivy.base import runTouchApp
from kivy.uix.boxlayout import BoxLayout
from kivy.graphics import Line
from kivy.lang import Builder


class SampBoxLayout(BoxLayout):
    def __init__(self, **kwargs):
        super(SampBoxLayout, self).__init__(**kwargs)
        with self.canvas.before:
            self.myline=Line(points=(100, 100, 400, 500), close=False, width=2)


if __name__ == "__main__":
    runTouchApp(Builder.load_file('main.kv'))
SampBoxLayout:
<SampBoxLayout>:
    orientation: "vertical"
    padding: 0
    spacing: 0

    TabbedPanel:
        opacity: 0.5
        do_default_tab: False

        TabbedPanelItem:
            text: "noc_clk"
            BoxLayout:
                orientation: "vertical"
                Widget:
                    height: "440dp"
                    size_hint_y: None
                    canvas:
                        Color:
                            rgba: 0, 0, 0, 0.5
                TabbedPanel:
                    do_default_tab: False
                    TabbedPanelItem:
                        text: "Node0"
                        BoxLayout:
                            orientation: "horizontal"