如何在python中使用kivy启用/禁用TextInput中的编辑
我有一段代码。(1) TextInput值应该显示,但首先它不应该是可编辑的,单击相应的复选框后,TextInput将是可编辑的。如何在python中使用kivy启用/禁用TextInput中的编辑,python,user-interface,kivy,edit,textinput,Python,User Interface,Kivy,Edit,Textinput,我有一段代码。(1) TextInput值应该显示,但首先它不应该是可编辑的,单击相应的复选框后,TextInput将是可编辑的。 (2) 使用迭代,标签和TextInput应该获得值。Label和TextInput的值不应硬编码(尽管它在我的代码中,@FJSevilla帮了我这个忙)。 (3) 但是,Label和TextInput的值以json格式存储在一个变量中。类似的东西(你可以考虑键,图中的值对)[变量={ A ]:“GOC”,“B”:“COC”,“C”:“DOW”} (如需更多间隙,请
(2) 使用迭代,标签和TextInput应该获得值。Label和TextInput的值不应硬编码(尽管它在我的代码中,@FJSevilla帮了我这个忙)。
(3) 但是,Label和TextInput的值以json格式存储在一个变量中。类似的东西(你可以考虑键,图中的值对)[变量={ A ]:“GOC”,“B”:“COC”,“C”:“DOW”} (如需更多间隙,请参见示意图)。 我感谢你的帮助
from kivy.app import App
from kivy.uix.tabbedpanel import TabbedPanel
from kivy.lang import Builder
Builder.load_string("""
<Test>:
do_default_tab: False
TabbedPanelItem:
text: 'page1'
BoxLayout:
padding: 50, 50, 50, 50
orientation: 'horizontal'
BoxLayout:
spacing: 50
orientation: 'vertical'
size_hint_x: 1
Label:
text: 'a'
Label:
text: 'b'
Label:
text: 'c'
BoxLayout:
spacing: 50
orientation: 'vertical'
TextInput:
text: 'Goc'
TextInput:
text: 'Coc'
TextInput:
text: 'Dow'
BoxLayout:
spacing: 50
orientation: 'vertical'
size_hint_x: 0.40
CheckBox:
text: 'CheckBox'
CheckBox:
text: 'CheckBox'
CheckBox:
text: 'CheckBox'
BoxLayout:
spacing: 50
orientation: 'vertical'
size_hint_x: 0.60
Button:
text: 'save'
Button:
text: 'save'
Button:
text: 'save'
""")
class Test(TabbedPanel):
pass
class MyApp(App):
def build(self):
test = Test()
return test
if __name__ == '__main__':
MyApp().run()
从kivy.app导入应用
从kivy.uix.tabbedpanel导入tabbedpanel
从kivy.lang导入生成器
生成器。加载\u字符串(“”)
:
do_default_选项卡:False
选项卡式面板项目:
文本:“第1页”
盒子布局:
填充:50,50,50,50
方向:“水平”
盒子布局:
间距:50
方向:“垂直”
大小提示:1
标签:
文字:“a”
标签:
文字:“b”
标签:
文本:“c”
盒子布局:
间距:50
方向:“垂直”
文本输入:
文本:“Goc”
文本输入:
文本:“Coc”
文本输入:
文字:“道指”
盒子布局:
间距:50
方向:“垂直”
尺寸:0.40
复选框:
文本:“复选框”
复选框:
文本:“复选框”
复选框:
文本:“复选框”
盒子布局:
间距:50
方向:“垂直”
尺寸:0.60
按钮:
文本:“保存”
按钮:
文本:“保存”
按钮:
文本:“保存”
""")
类别测试(选项卡式面板):
通过
类别MyApp(应用程序):
def生成(自):
测试=测试()
回归试验
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
MyApp().run()
首先,感谢您提供了一款易于使用的应用程序 除了JSON之外,我还尝试实现您想要的东西。我使用的是一个简单的列表,扩展JSON代码应该很简单 我没有使用列,而是使用行,这样可以更容易地将标签textinput和复选框的属性链接在一起
从kivy.app导入应用
从kivy.uix.tabbedpanel导入tabbedpanel
从kivy.uix.boxlayout导入boxlayout
从kivy.properties导入StringProperty
从kivy.uix.textinput导入textinput
从kivy.uix.checkbox导入复选框
从kivy.lang导入生成器
行=['Goc','COC','EEE']
生成器。加载\u字符串(“”)
:
do_default_选项卡:False
选项卡式面板项目:
文本:“第1页”
表:
填充:50,50,50,50
方向:“垂直”
:
间距:50
#方向:“垂直”
大小提示:1
txt:txtinpt.text
标签:
文本:root.txt
文本输入:
id:txtinpt
文本:root.txt
已禁用:未选中复选框。活动
复选框:
id:复选框
文本:“复选框”
活动:错误
按钮:
文本:“保存”
""")
课程表(BoxLayout):
定义初始(自我,**kwargs):
超级(表,自).\uuuu初始化(**kwargs)
对于行中的行:
self.add_小部件(行)
类行(BoxLayout):
txt=StringProperty()
定义初始值(self,row,**kwargs):
超级(行,自).\uuuu初始值(**kwargs)
self.txt=行
类别测试(选项卡式面板):
通过
类别MyApp(应用程序):
def生成(自):
测试=测试()
回归试验
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
MyApp().run()
您也可以在kv中执行此操作,而无需复选框中的功能:启用。如下所示:TextInput:disabled:not复选框。active@favcau我不知道,谢谢。我据此编辑了我的答案。亲爱的@PalimPalim谢谢你抽出时间。其实还有一些问题。(1) Label和TextInput都在编辑中,但只需要编辑对应标签的TextInput。(2) 编辑后,当我再次单击复选按钮时,相应的文本输入应再次不可编辑。(3)更改应该显示在终端上(包括更改的标签和文本输入)。我想我不能完全理解你的意思。请按步骤重复。对于第一行:步骤1:标签显示a,文本输入禁用显示Goc,复选框未选中。步骤2检查框正在取消选中-->文本输入可编辑。现在,标签是否应该根据TextInput进行更改?请给我更详细的步骤,如逐步:步骤1:标签显示“a”,文本输入禁用显示“Goc”,复选框未选中。步骤2:Checkox正在取消选中-->文本输入可编辑。步骤3:只有文本输入更改,标签在其初始值中是固定的。步骤4:然后显示终端中的更改(标签和更新的文本输入值)。
from kivy.app import App
from kivy.uix.tabbedpanel import TabbedPanel
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import StringProperty
from kivy.uix.textinput import TextInput
from kivy.uix.checkbox import CheckBox
from kivy.lang import Builder
ROWS = ['Goc', 'COC', 'EEE']
Builder.load_string("""
<Test>:
do_default_tab: False
TabbedPanelItem:
text: 'page1'
Table:
padding: 50, 50, 50, 50
orientation: 'vertical'
<Row>:
spacing: 50
#orientation: 'vertical'
size_hint_x: 1
txt: txtinpt.text
Label:
text: root.txt
TextInput:
id: txtinpt
text: root.txt
disabled: not CheckBox.active
CheckBox:
id:CheckBox
text: 'CheckBox'
active: False
Button:
text: 'save'
""")
class Table(BoxLayout):
def __init__(self, **kwargs):
super(Table, self).__init__(**kwargs)
for row in ROWS:
self.add_widget(Row(row))
class Row(BoxLayout):
txt = StringProperty()
def __init__(self, row, **kwargs):
super(Row, self).__init__(**kwargs)
self.txt = row
class Test(TabbedPanel):
pass
class MyApp(App):
def build(self):
test = Test()
return test
if __name__ == '__main__':
MyApp().run()