【问题标题】:How to ensure proper functionality when adding widgets to Kivy向 Kivy 添加小部件时如何确保功能正常
【发布时间】:2019-11-27 20:18:44
【问题描述】:

我正在尝试创建一个 Kivy/Python 应用程序,它让用户在一个屏幕上按下一个按钮,然后将几个小部件添加到下一个屏幕。但是,当我运行脚本时,按钮出现并且可以在第一页上单击,而小部件在第二页上可见,但无法与之交互。

这是我的代码示例,感谢任何帮助:

py:

import kivy
kivy.require('1.11.1')

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.properties import ListProperty, StringProperty, ObjectProperty
from kivy.core.window import Window
from kivy.uix.label import Label
from kivy.uix.scrollview import ScrollView
from kivy.uix.button import Button
from kivy.uix.spinner import Spinner

sm = None

class RcGUITestApp(App):
    def build(self):
        global sm
        Window.clearcolor = (0, 0, 0.35, 1)
        sm = ScreenManager()
        sm.add_widget(NewJobPage(name="new_job_page"))
        sm.add_widget(IPMConfirmPage(name = "ipm_confirm_page"))
        return sm

class NewJobPage(Screen):
    def retrieve(self):
        global rc
        global sm
        sm.get_screen("ipm_confirm_page").displayIPM()

class IPMConfirmPage(Screen):
    grid = ObjectProperty(None)

    def displayIPM(self):
        for ipm in range(50):
            self.grid.add_widget(Label(text="A"))
            self.grid.add_widget(Spinner(text="B"))
            self.grid.add_widget(Spinner(text="C"))

def main():
    rc_gui = RcGUITestApp()
    rc_gui.run()

if __name__ == "__main__":
        main()

kv:

<NewJobPage>:
        BoxLayout:
                orientation: "horizontal"
                size_hint: (1, .35)

                Button:
                        text: "RETRIEVE"
                        pos_hint: {"center_x": .5, "center_y": .5}
                        size_hint: (.33, .33)
                        color: (1,1,1,1)
                        on_press:
                                root.retrieve()
                                root.manager.transition.direction = "left"
                                root.manager.transition.duration = .8
                                root.manager.current = "ipm_confirm_page"

<IPMConfirmPage>:
        grid: Grid
        GridLayout:
                cols: 1
                size_hint_x: 1
                padding: 10
                spacing: 10

                BoxLayout:
                        size_hint: (1, 0.1)

                        Label:
                                text: "IPM"
                        Label:
                                text: "CD#"
                        Label:
                                text: "CONDUCTOR"

                ScrollView:

                        GridLayout:
                                id: Grid
                                cols: 3
                                height: self.minimum_height
                                size_hint: 1, None
                                spacing: 50
                                padding: 30

首页输出

第二页输出

【问题讨论】:

    标签: python button widget kivy spinner


    【解决方案1】:

    您需要提供添加到grid 的每个小部件的height。该问题有两种解决方案。

    方法一——kv文件

    此方法只涉及通过添加row_force_default: Truerow_default_height: 40 来更改kv 文件。

    片段 - kv 文件

        ScrollView:
    
            GridLayout:
                row_force_default: True
                row_default_height: 40
                ...
    

    方法二——py文件

    此方法仅涉及通过添加size_hint_y=Noneheight=40 来更改py 文件。

    片段

    def displayIPM(self):
        for ipm in range(50):
            self.grid.add_widget(Label(text="A", size_hint_y=None, height=40))
            self.grid.add_widget(Spinner(text="B", size_hint_y=None, height=40))
            self.grid.add_widget(Spinner(text="C", size_hint_y=None, height=40))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多