【问题标题】:kivy - textinput from kv to py - import datakivy - 从 kv 到 py 的文本输入 - 导入数据
【发布时间】:2019-01-02 17:25:02
【问题描述】:

我正在尝试从我的 kv 文件中的简单文本输入中获取数据,并使用我的 python 文件中的信息。 但我不断收到同样的错误。 当我按下按钮并且尝试运行的函数看起来像它试图从 text_location 小部件获取信息时会发生此错误 提前谢谢你。

class ScatterTextWidget(BoxLayout):


    def initialize_request(self):
         ''' Initial analysis and control flow of the class '''

         location = self.ids.input_location
         date = S.ids.input_date
         time_raw = ScatterTextWidget.ids.input_time
         print(f'{location} - {date} - {time_raw}')

class HistoricalApp(App):
     def build(self):
         return ScatterTextWidget()

if __name__ == "__main__":

    HistoricalApp().run()

名为“historical.kv”的 kivy 文件 我减少它,因为它有点长

<ScatterTextWidget>:
    BoxLayout:
        canvas.before:
            Color:
                rgb: utils.get_color_from_hex('#01183f')
            Rectangle:
                pos: self.pos
                size: self.size
        size_hint_y: None
        height: 40
        valign: 'middle'

        TextInput:
            id:text_location
            width: 200
            id: input2
            font_size: 15
            size_hint_y: None
            height:40
        TextInput:
            id:input_date
            width: 200
            id: input1
            font_size: 15
            size_hint_y: None
            height: 40
        TextInput:
            id:input_time
            width: 200
            id: input1
            font_size: 15
            size_hint_y: None
            height: 40

我收到的错误是

File "kivy\properties.pyx", line 838, in 
 kivy.properties.ObservableDict.__getattr__
 KeyError: 'text_location'

 During handling of the above exception, another exception occurred:

 Traceback (most recent call last):
   File "C:/Users/IBKCo/Desktop/Git Programs/TimeStationHistoricalRecords/MainGui.py", line 77, in <module>
     HistoricalApp().run()
   File "C:\Users\IBKCo\Desktop\Git Programs\TimeStationHistoricalRecords\pdEnv\lib\site-packages\kivy\app.py", line 826, in run
     runTouchApp()
   File "C:\Users\IBKCo\Desktop\Git Programs\TimeStationHistoricalRecords\pdEnv\lib\site-packages\kivy\base.py", line 502, in runTouchApp
     EventLoop.window.mainloop()
   File "C:\Users\IBKCo\Desktop\Git Programs\TimeStationHistoricalRecords\pdEnv\lib\site-packages\kivy\core\window\window_sdl2.py", line 727, in mainloop
     self._mainloop()
   File "C:\Users\IBKCo\Desktop\Git Programs\TimeStationHistoricalRecords\pdEnv\lib\site-packages\kivy\core\window\window_sdl2.py", line 460, in _mainloop
     EventLoop.idle()
   File "C:\Users\IBKCo\Desktop\Git Programs\TimeStationHistoricalRecords\pdEnv\lib\site-packages\kivy\base.py", line 340, in idle
     self.dispatch_input()
   File "C:\Users\IBKCo\Desktop\Git Programs\TimeStationHistoricalRecords\pdEnv\lib\site-packages\kivy\base.py", line 325, in dispatch_input
     post_dispatch_input(*pop(0))
   File "C:\Users\IBKCo\Desktop\Git Programs\TimeStationHistoricalRecords\pdEnv\lib\site-packages\kivy\base.py", line 291, in post_dispatch_input
     wid.dispatch('on_touch_up', me)
   File "kivy\_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
   File "C:\Users\IBKCo\Desktop\Git Programs\TimeStationHistoricalRecords\pdEnv\lib\site-packages\kivy\uix\behaviors\button.py", line 179, in on_touch_up
     self.dispatch('on_release')
   File "kivy\_event.pyx", line 703, in kivy._event.EventDispatcher.dispatch
   File "kivy\_event.pyx", line 1214, in kivy._event.EventObservers.dispatch
   File "kivy\_event.pyx", line 1098, in kivy._event.EventObservers._dispatch
   File "C:\Users\IBKCo\Desktop\Git Programs\TimeStationHistoricalRecords\pdEnv\lib\site-packages\kivy\lang\builder.py", line 64, in custom_callback
     exec(__kvlang__.co_value, idmap)
   File "C:\Users\IBKCo\Desktop\Git Programs\TimeStationHistoricalRecords\historical.kv", line 127, in <module>
     on_release: root.initialize_request()
   File "C:/Users/IBKCo/Desktop/Git Programs/TimeStationHistoricalRecords/MainGui.py", line 31, in initialize_request
     location = self.ids.text_location
   File "kivy\properties.pyx", line 841, in kivy.properties.ObservableDict.__getattr__
 AttributeError: 'super' object has no attribute '__getattr__'

提前谢谢你 最好的,

【问题讨论】:

  • 您为每个TextInput 定义了多个ids。只有最后一个有效。而且你有重复的ids,不允许。
  • 哇,我不敢相信我没有看到。这就是为什么有时你需要第二双眼睛来帮助你。非常感谢您的帮助。

标签: python python-3.x kivy kivy-language


【解决方案1】:

首先,您需要删除id:input1 行和id:input2 行。然后将您的initialize_request 方法更改为:

def initialize_request(self):
     ''' Initial analysis and control flow of the class '''

     location = self.ids.text_location.text
     date = self.ids.input_date.text
     time_raw = self.ids.input_time.text
     print(f'{location} - {date} - {time_raw}')

请注意,self.ids.text_location 是对 TextInput 小部件的引用,因此您必须添加 .text 才能获取其文本。其他 TextInput 小部件也是如此。

【讨论】:

  • 这完全是菜鸟的错误。谢谢你指出,最好的,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多