向 Kivy 添加小部件时如何确保功能正常
Posted
技术标签:
【中文标题】向 Kivy 添加小部件时如何确保功能正常【英文标题】:How to ensure proper functionality when adding widgets to 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
首页输出
第二页输出
【问题讨论】:
【参考方案1】:您需要提供添加到grid
的每个小部件的height
。该问题有两种解决方案。
方法一——kv文件
此方法只涉及通过添加row_force_default: True
和row_default_height: 40
来更改kv 文件。
片段 - kv 文件
ScrollView:
GridLayout:
row_force_default: True
row_default_height: 40
...
方法二——py文件
此方法仅涉及通过添加size_hint_y=None
和height=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))
【讨论】:
以上是关于向 Kivy 添加小部件时如何确保功能正常的主要内容,如果未能解决你的问题,请参考以下文章