【问题标题】:Kivy switching widgets using a toolbarKivy 使用工具栏切换小部件
【发布时间】:2021-07-04 19:27:22
【问题描述】:

我正在尝试制作一个监控应用程序,您可以在其中切换哪个统计信息将是主要小部件。我想有一个屏幕管理器,然后为每个统计数据设置单独的屏幕,但似乎会有更好的方法。

下面是我的 kv 文件,其中每个布局都有单独的屏幕,工具栏位于屏幕之外:

<Mytest>
    GridLayout
        cols: 1
        size: root.size
        StackLayout:
            
            orientation: 'lr-tb'
            size_hint_y: .05
            Button:
                text: "pog"
                size_hint_x: .1
                background_color: (0, 0, 0, 0)
                on_press: root.ids.manager.current = 'first'
                
            Button:
                text: "p"
                size_hint_x: .1
                background_color: (0, 0, 0, 0)
                on_press: root.ids.manager.current = 'second'
            Button:
                text: " o"
                size_hint_x: .1
                background_color: (0, 0, 0, 0)
                on_press: root.ids.manager.current = 'third'
            Button:
                text: "G"
                size_hint_x: .1
                background_color: (0, 0, 0, 0)
                on_press: root.ids.manager.current = 'fourth'

        ScreenManager:
            id:manager
            Screen:
                name: 'first'
                GridLayout:
                    cols: 2
                    rows: 1
                    GridLayout:
                        cols: 1
                        spacing: (3, 5)
                        Label:
                            text:"Idk"
                            canvas.before:
                                Color: 
                                    rgba: (.2, 1, 1, 1)
                                Rectangle:
                                    pos: self.pos
                                    size: self.size
                        Label:
                            text:"Idk"
                            canvas.before:
                                Color: 
                                    rgba: (1, 1, .2, 1)
                                Rectangle:
                                    pos: self.pos
                                    size: self.size
                        Label:
                            text:"Idk"
                            canvas.before:
                                Color: 
                                    rgba: (0, 1, 0, 1)
                                Rectangle:
                                    pos: self.pos
                                    size: self.size
                    Splitter:
                        sizeable_from: "left"
                        strip_size: "7pt"
                        Label:
                            text:"POGER"
                            canvas.before:
                                Color: 
                                    rgba: (1, 0, 0, 1)
                                Rectangle:
                                    pos: self.pos
                                    size: self.size
            Screen:
                name: 'second'
                GridLayout:
                    cols: 2
                    rows: 1
                    GridLayout:
                        cols: 1
                        spacing: (3, 5)
                        Label:
                            text:"POGER"
                            canvas.before:
                                Color: 
                                    rgba: (1, 0, 0, 1)
                                Rectangle:
                                    pos: self.pos
                                    size: self.size
                        Label:
                            text:"Idk"
                            canvas.before:
                                Color: 
                                    rgba: (1, 1, .2, 1)
                                Rectangle:
                                    pos: self.pos
                                    size: self.size
                        Label:
                            text:"Idk"
                            canvas.before:
                                Color: 
                                    rgba: (0, 1, 0, 1)
                                Rectangle:
                                    pos: self.pos
                                    size: self.size
                    Splitter:
                        sizeable_from: "left"
                        strip_size: "7pt"
                        Label:
                            text:"Idk"
                            canvas.before:
                                Color: 
                                    rgba: (.2, 1, 1, 1)
                                Rectangle:
                                    pos: self.pos
                                    size: self.size
            Screen:
                name: 'third'
                GridLayout:
                    cols: 2
                    rows: 1
                    GridLayout:
                        cols: 1
                        spacing: (3, 5)
                        Label:
                            text:"Idk"
                            canvas.before:
                                Color: 
                                    rgba: (.2, 1, 1, 1)
                                Rectangle:
                                    pos: self.pos
                                    size: self.size
                        Label:
                            text:"POGER"
                            canvas.before:
                                Color: 
                                    rgba: (1, 0, 0, 1)
                                Rectangle:
                                    pos: self.pos
                                    size: self.size
                        Label:
                            text:"Idk"
                            canvas.before:
                                Color: 
                                    rgba: (0, 1, 0, 1)
                                Rectangle:
                                    pos: self.pos
                                    size: self.size
                    Splitter:
                        sizeable_from: "left"
                        strip_size: "7pt"
                        Label:
                            text:"Idk"
                            canvas.before:
                                Color: 
                                    rgba: (1, 1, .2, 1)
                                Rectangle:
                                    pos: self.pos
                                    size: self.size
            Screen:
                name: 'fourth'
                GridLayout:
                    cols: 2
                    rows: 1
                    GridLayout:
                        cols: 1
                        spacing: (3, 5)
                        Label:
                            text:"Idk"
                            canvas.before:
                                Color: 
                                    rgba: (.2, 1, 1, 1)
                                Rectangle:
                                    pos: self.pos
                                    size: self.size
                        Label:
                            text:"Idk"
                            canvas.before:
                                Color: 
                                    rgba: (1, 1, .2, 1)
                                Rectangle:
                                    pos: self.pos
                                    size: self.size
                        Label:
                            text:"POGER"
                            canvas.before:
                                Color: 
                                    rgba: (1, 0, 0, 1)
                                Rectangle:
                                    pos: self.pos
                                    size: self.size
                    Splitter:
                        sizeable_from: "left"
                        strip_size: "7pt"
                        Label:
                            text:"Idk"
                            canvas.before:
                                Color: 
                                    rgba: (0, 1, 0, 1)
                                Rectangle:
                                    pos: self.pos
                                    size: self.size




            # GridLayout:
            #     cols: 2
            #     rows: 1
            #     GridLayout:
            #         cols: 1
            #         spacing: (3, 5)
            #         Label:
            #             text:"Idk"
            #             canvas.before:
            #                 Color: 
            #                     rgba: (1, 0, 0, 1)
            #                 Rectangle:
            #                     pos: self.pos
            #                     size: self.size
            #         Label:
            #             text:"Idk"
            #             canvas.before:
            #                 Color: 
            #                     rgba: (1, 1, .2, 1)
            #                 Rectangle:
            #                     pos: self.pos
            #                     size: self.size
            #         Label:
            #             text:"POGER"
            #             canvas.before:
            #                 Color: 
            #                     rgba: (.2, 1, 1, 1)
            #                 Rectangle:
            #                     pos: self.pos
            #                     size: self.size
            #     Splitter:
            #         sizeable_from: "left"
            #         strip_size: "7pt"
            #         Label:
            #             text:"IDK"
            #             canvas.before:
            #                 Color: 
            #                     rgba: (0, 1, 0, 1)
            #                 Rectangle:
            #                     pos: self.pos
            #                     size: self.size

python 文件只是导入然后构建应用程序:

import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from kivy.graphics import Rectangle, Color
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.pagelayout import PageLayout
from kivy.uix.splitter import Splitter
from kivy.uix.screenmanager import ScreenManager, Screen

【问题讨论】:

    标签: user-interface kivy kivy-language


    【解决方案1】:

    美好的一天。我推荐一个 Python 类,它可以保存给定统计数据的值。当您更改 stat 时,调用一个函数,将 stat 的每个属性加载到主小部件中。每个统计数据都是它自己的对象。

    【讨论】:

    • 如果我做对了,将统计信息和周围数据加载到一个类中,然后使用 switch 语句交换调用数据的位置,如主小部件或侧面小部件。
    • 您正在考虑的接近于工厂设计模式。我会工作。
    猜你喜欢
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多