Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中使用kivy启用/禁用TextInput中的编辑_Python_User Interface_Kivy_Edit_Textinput - Fatal编程技术网

如何在python中使用kivy启用/禁用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”} (如需更多间隙,请

我有一段代码。(1) TextInput值应该显示,但首先它不应该是可编辑的,单击相应的复选框后,TextInput将是可编辑的。
(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()