Canvas Kivy动态添加布局

Canvas Kivy动态添加布局,canvas,layout,dynamic,kivy,kivy-language,Canvas,Layout,Dynamic,Kivy,Kivy Language,我有以下问题:我通过一个调用函数advanced_mode()的按钮将布局动态添加到各种屏幕。除此之外,我还动态更改布局上的按钮,这就是我构建函数sm_switcher()和sm_build_button_bar()的原因。随机添加的布局中的小部件未对齐,按钮图形未加载等等。我怎样才能解决这个问题?我是否必须以不同的方式创建/实例化布局类,或者我是否缺少一个.dou layout()或_trigger_layout()?我希望我的例子足够清楚 类LaserAdvanced(GridLayou

我有以下问题:我通过一个调用函数advanced_mode()的按钮将布局动态添加到各种屏幕。除此之外,我还动态更改布局上的按钮,这就是我构建函数sm_switcher()和sm_build_button_bar()的原因。随机添加的布局中的小部件未对齐,按钮图形未加载等等。我怎样才能解决这个问题?我是否必须以不同的方式创建/实例化布局类,或者我是否缺少一个.dou layout()或_trigger_layout()?我希望我的例子足够清楚


类LaserAdvanced(GridLayout):#问题布局,在BoxL中的函数初始化()中实例化
通过
类激光高级按钮(框布局):
通过
类按钮(按钮):
通过
班级BoxL(BoxLayout):#这是我的主课
定义初始化(自):
super()。\uuuu init\uuuuu()
def advanced_mode(self):#此功能用于添加和删除问题布局
“”“切换到当前屏幕的高级模式。”“”
屏幕id=self.ids.sm.current
如果屏幕id==“激光屏幕”:
如果不是自动激光\高级\激活:
打印('启用激光高级模式…')
self.ids.laser\u screen\u master\u box.add\u小部件(self.laser\u screen\u advanced\u box)
self.ids.bottom\u button\u box.clear\u widgets()
self.ids.bottom\u button\u box.add\u小部件(self.laser\u screen\u advanced\u button)
self.laser\u advanced\u active=真
其他:
打印(“禁用激光高级模式…”)
self.ids.laser\u screen\u master\u box.移除小部件(self.laser\u screen\u advanced\u box)
self.sm\u build\u按钮栏(“激光屏幕”)
self.laser\u advanced\u active=错误
def sm_切换器(自我,转到屏幕):#这将替换sm.current='SCREENNAME'
“”“根据它们的顺序相应地向左/向右切换屏幕。
参数
----------
转到屏幕:字符串
kivy文件中定义的屏幕ID
"""
对于idx,枚举中的scr(self.ids.sm.screen\u名称):
如果转到屏幕==scr:
goto_索引=idx
如果self.ids.sm.current==scr:
当前索引=idx
如果当前索引>转到索引:
self.ids.sm.transition.direction='right'
如果当前索引<转到索引:
self.ids.sm.transition.direction='left'
self.lastScreen=转到屏幕
self.sm\u构建按钮栏(转到屏幕)
#self.ids.sm.canvas.ask_update()#一些我试图修复的错误
self.ids.sm.current=转到屏幕
def sm_build_button_栏(自我,转到屏幕):
“”“在每个屏幕的彩色底线上方分别构建按钮框。”“”
self.ids.bottom\u button\u box.clear\u widgets()
如果转到屏幕==“激光屏幕”:
第一个元素=标签()#占位符
第二个元素=标签()#占位符
第三个元素=标签()#占位符
第四个元素=t2按钮(text='Reset Laser',color=(0,0,0,1))
第四个元素在发布时=lambda*args:print('doing stuff')
self.ids.bottom\u button\u box.add\u小部件(第一个\u元素)
self.ids.bottom\u button\u box.add\u小部件(第二个\u元素)
self.ids.bottom\u button\u box.add\u小部件(第三个\u元素)
self.ids.bottom\u button\u box.add\u小部件(第四个\u元素)
def初始化(self):#这是我在登录后调用的某个函数,因此在GUI中发生某些事情之后
打印('在…之前做一些事情')
打印('实例化高级类..')
BoxL.laser\u screen\u advanced\u box=LaserAdvanced(cols=4,间距=(0,10),填充=(0,10,0,0))
#BoxL.laser_screen_advanced_box.do_layout()#这也是我试图修复的错误
BoxL.laser\u screen\u advanced\u buttons=激光高级按钮()
类GUI_T2(应用程序):
“”“GUI_T2类。”“”
def生成(自):
“”“使用GUI_T2.ini无法运行的配置的其余部分构建函数。”“”
load_文件('style.kv')#这里我加载一些按钮样式等等
Builder.load_文件('layouts.kv')#这里我加载发布布局(LaserAdvanced)
#BoxL.laser_screen_advanced_box=LaserAdvanced()#我也试过
self.title='mygui'
返回框l()
如果名称=“\uuuuu main\uuuuuuuu”:
GUI_T2().run()

非常感谢您的任何帮助,我为此挣扎了很长一段时间,我的应用程序像这样毫无用处。。我上传了问题的截图:。有时我的按钮无法正确显示,有时小部件的对齐非常随机。任何帮助都将不胜感激,我为此挣扎了很长一段时间,我的应用程序像这样毫无用处。。我上传了问题的截图:。有时我的按钮无法正确显示,有时小部件的对齐方式非常随机。