我正在尝试从主面板中删除ScreenManager小部件,并用另一个ScreenManager小部件替换它。但是我收到了上面提到的错误。我已经能够以这种方式删除其他小部件(屏幕),而且从未出现错误,但屏幕管理器似乎有所不同
主.py
class MainPanel(TabbedPanel):
manager = ObjectProperty()
usb_manager = ObjectProperty()
hubtests_sm = ObjectProperty()
def __init__(self, *args, **kwargs):
super(MainPanel, self).__init__(*args, **kwargs)
def switch_sm(self):
self.manager = self.hubtests_sm
self.remove_widget(self.usb_manager)
self.add_widget(self.hubtests_sm)
主电源.kv
<MainPanel>:
id: mp
manager: usb_manager
usb_manager: usb_manager
size_hint: 1,1
tab_width: 65
do_default_tab: False
tab_pos: 'top_right'
TabbedPanelItem:
id: usb_tab
text: 'Usb'
BoxLayout:
orientation: 'vertical'
UsbScreenManager:
id: usb_manager
usb屏幕管理器.kv
#:import label kivy.uix.label
#:import sla kivy.adapters.simplelistadapter
#:import hvd hub_validation_dict
#:import hvt hub_validation_test2
#:import cfg config
<UsbScreenManager>:
id: usb_manager
h2h: h2h
hvs: hvs
v9_icon: v9_icon
v9_test: v9_test
c5_icon: c5_icon
c5_test: c5_test
H2HScreen:
id:h2h
HubValidationScreen:
id:hvs
V9ValidationIconScreen
id: v9_icon
V9ValidationTestScreen:
id: v9_test
C5ValidationIconScreen:
id: c5_icon
C5ValidationTestScreen:
id: c5_test
<H2HScreen>:
id: h2h
name: 'h2h'
BoxLayout:
id:bl
orientation: 'vertical'
TestIcon:
id: h2hicon
source: 'h2h.png'
<HubValidationScreen>:
id: hvs
name: 'hvs'
BoxLayout:
id:bl
orientation: 'vertical'
TestIcon:
id: hubvicon
source: 'usb_button.png'
on_press: app.root.switch_sm()<----Attempt to switch screenmanager
File "/usr/lib/python2.7/dist-packages/kivy/lang.py", line 1465, in custom_callback
exec(__kvlang__.co_value, idmap)
File "usb_screen_manager.kv", line 53, in <module>
on_press: app.root.switch_sm()
File "sam1.py", line 211, in switch_sm
self.remove_widget(self.usb_manager)
File "/usr/lib/python2.7/dist-packages/kivy/uix/tabbedpanel.py", line 547, in remove_widget
self._childrens.pop(widget, None)
TypeError: pop() takes at most 1 argument (2 given)
我修复了这个问题,因为我误解了TabbedPanel类。当我应该从TabbedPanelItem类调用它时,我正在从MainPanel类调用remove\小部件。因此,我为MainPanel类中的tabbedpanel项创建了一个ObjectProperty,并使用它删除screen manager小部件。但是由于它们是如何加载的,我最终不得不做一个清晰的小部件,而不是按照正确的顺序重新添加小部件
相关问题 更多 >
编程相关推荐