python - 如何在kivy的tabbedpanel小部件中启用动态创建的选项卡的滚动?
问题描述
我的 kivy 应用程序包含一个主屏幕和另外 10 个屏幕。主屏幕有一个带有 5 个选项卡的选项卡式面板小部件。每个选项卡代表一个组,每个组有两个按钮,代表两个屏幕。在按钮按下事件上,将加载相应的屏幕。
我的代码中没有错误。但是,选项卡式面板中仅显示少数选项卡。请建议我如何在选项卡式面板小部件中创建可滚动选项卡。我参考了文档并遇到了 switch_to 函数,但没有说明如何使用它。
tst.py
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty
from kivy.uix.tabbedpanel import TabbedPanelItem
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
class windowManager(ScreenManager):
pass
class MainScreen(Screen):
mytabs = ObjectProperty(None)
category = {'Group 1':['Screen 1', 'Screen 2'],
'Group 2': ['Screen 3', 'Screen 4'],
'Group 3': ['Screen 5', 'Screen 6'],
'Group 4': ['Screen 7', 'Screen 8'],
'Group 5': ['Screen 9', 'Screen 10']
}
tabs = []
buttons = []
def add_tabs(self):
for item in self.category:
self.tabs.append(TabbedPanelItem(text = item))
button_grid = BoxLayout(orientation = 'vertical')
for value in self.category[item]:
self.buttons.append(Button(text = value))
button_grid.add_widget(self.buttons[-1])
self.tabs[-1].add_widget(button_grid)
self.mytabs.add_widget(self.tabs[-1])
for i in self.buttons:
i.bind(on_press = self.navigate)
def navigate(self,instance):
self.manager.current = instance.text
class Screen1(Screen):
pass
class Screen2(Screen):
pass
class Screen3(Screen):
pass
class Screen4(Screen):
pass
class Screen5(Screen):
pass
class Screen6(Screen):
pass
class Screen7(Screen):
pass
class Screen8(Screen):
pass
class Screen9(Screen):
pass
class Screen10(Screen):
pass
class Docky(App):
def build(self):
return windowManager()
if __name__=="__main__":
Docky().run()
Docky.kv
# File: docapp.py
<WindowManager>:
MainScreen:
Screen1:
Screen2:
Screen3:
Screen4:
Screen5:
Screen6:
Screen7:
Screen8:
Screen9:
Screen10:
<MainScreen>:
name: 'main'
mytabs: my_tabs
TabbedPanel:
id: my_tabs
tab_pos: 'left_top'
tab_width: 150
size_hint: 1, 1
do_default_tab: False
on_kv_post:
root.add_tabs()
<Screen1>:
name: 'Screen 1'
BoxLayout:
orientation: 'vertical'
Label:
text: 'this is screen 1'
#size_hint: None, 0.8
Button:
text: 'Back to main screen'
size_hint: 1, 0.2
on_press: app.root.current = 'main'
<Screen2>:
name: 'Screen 2'
BoxLayout:
orientation: 'vertical'
Label:
text: 'this is screen 2'
Button:
text: 'Back to main screen'
size_hint: 1, 0.2
on_press: app.root.current = 'main'
<Screen3>:
name: 'Screen 3'
BoxLayout:
orientation: 'vertical'
Label:
text: 'this is screen 3'
#size_hint: None, 0.8
Button:
text: 'Back to main screen'
size_hint: 1, 0.2
on_press: app.root.current = 'main'
<Screen4>:
name: 'Screen 4'
BoxLayout:
orientation: 'vertical'
Label:
text: 'this is screen 4'
Button:
text: 'Back to main screen'
size_hint: 1, 0.2
on_press: app.root.current = 'main'
<Screen5>:
name: 'Screen 5'
BoxLayout:
orientation: 'vertical'
Label:
text: 'this is screen 5'
#size_hint: None, 0.8
Button:
text: 'Back to main screen'
size_hint: 1, 0.2
on_press: app.root.current = 'main'
<Screen6>:
name: 'Screen 6'
BoxLayout:
orientation: 'vertical'
Label:
text: 'this is screen 6'
Button:
text: 'Back to main screen'
size_hint: 1, 0.2
on_press: app.root.current = 'main'
<Screen7>:
name: 'Screen 7'
BoxLayout:
orientation: 'vertical'
Label:
text: 'this is screen 7'
#size_hint: None, 0.8
Button:
text: 'Back to main screen'
size_hint: 1, 0.2
on_press: app.root.current = 'main'
<Screen8>:
name: 'Screen 8'
BoxLayout:
orientation: 'vertical'
Label:
text: 'this is screen 8'
Button:
text: 'Back to main screen'
size_hint: 1, 0.2
on_press: app.root.current = 'main'
<Screen9>:
name: 'Screen 9'
BoxLayout:
orientation: 'vertical'
Label:
text: 'this is screen 9'
#size_hint: None, 0.8
Button:
text: 'Back to main screen'
size_hint: 1, 0.2
on_press: app.root.current = 'main'
<Screen10>:
name: 'Screen 10'
BoxLayout:
orientation: 'vertical'
Label:
text: 'this is screen 10'
Button:
text: 'Back to main screen'
size_hint: 1, 0.2
on_press: app.root.current = 'main'
解决方案
推荐阅读
- azure - Azure devops 和自托管代理之间的网络费用
- javascript - 使用 CEFSharp 进行编辑
- php - 未捕获的 PHP 异常:“在 /RouterListener.php 第 136 行找不到“GET /src/Controller/TaskNeedsController.php”的路由”
- python - 强制用户输入正数
- r - 由 R 图的小箭头组成的线
- sql - 我的查询中年份条件的上限被忽略
- c++ - 函数仅正确获取第一个可变参数值
- angular - ANGULAR:如何使用泛型将抽象类扩展两个级别
- sql-server - 使用 RowVersion 查询 SQL Server 表
- c# - 禁止访问私有变量