質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

pythonのdef関数の戻り値をkvファイルのLabelに表示させたい

noggi
Gadget

総合スコア6

Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

2回答

0評価

0クリップ

373閲覧

投稿2022/02/15 16:08

編集2022/02/20 14:39

前提・実現したいこと

初心者質問で申し訳ありませんがよろしくお願いします。

pythonファイルとkivyファイルを分けて書いています。

def関数のupdate_time の戻り値である、str(lat + " " + lon) + str(datetime.today()) の結果をLabelに表示させたいと思っています。が、以下のようなエラーが出てしまいます。

この場合kivyファイルの方で、text: の後ろをどのように定義したら、update_time関数の結果がLabelに表示できるのでしょうか。

何卒ご教授いただけるとありがたいです。よろしくお願いします。

発生している問題・エラーメッセージ

BuilderException: Parser: File "ファイルパス", line 61: ... 59: font_size: "30" 60: bold: True >> 61: text: root.get_datetime.place 62: 63: ... AttributeError: 'function' object has no attribute 'place' File "ファイルパス", line 242, in create_handler return eval(value, idmap), bound_list File "ファイルパス", line 61, in <module> text: root.get_datetime.place File "ファイルパス", line 695, in _apply_rule value, bound = create_handler( File "ファイルパス", line 245, in create_handler raise BuilderException(rule.ctx, rule.line,

該当のソースコード

python

from kivy.config import Config Config.set('graphics', 'width', '500') Config.set('graphics', 'height', '500') from kivy.app import App from kivy.lang import Builder from kivy.uix.widget import Widget from kivy.uix.button import Button from kivy.uix.behaviors import ButtonBehavior from kivy.uix.image import Image from kivy.uix.screenmanager import ScreenManager, Screen from kivy.graphics.texture import Texture from kivy.core.text import LabelBase, DEFAULT_FONT from kivy.resources import resource_add_path from kivy.clock import Clock from kivy.properties import StringProperty import requests import json from datetime import datetime import threading import time import queue import csv from geopy.distance import geodesic import numpy as np import requests import ui import subprocess resource_add_path("/System/Library/Fonts") LabelBase.register(DEFAULT_FONT, "ヒラギノ角ゴシック W0.ttc") Builder.load_file("/Users/user_name/Downloads/GpsApp.kv") class MenuScreen(Screen): pass class StopwatchScreen(Screen): text = StringProperty() def get_datetime(self): geo_request_url = "https://get.geojs.io/v1/ip/geo.json" geo_data = requests.get(geo_request_url) json_geo = geo_data.json() lat = json.dumps(json_geo["latitude"]) lon = json.dumps(json_geo["longitude"]) place = str(lat + "\n" + lon) zikan = str(datetime.now()) return zikan + place #作成途中 def go_clicked(self): print("Buckle up!") Clock.schedule_interval(get_datetime, 1) print(get_datetime) # 作成途中 def arrived_clicked(self): Clock.unschedule(go_clicked) print("Arrived!") #作成途中 class ResultScreen(Screen): start_time = time.time() stop_time = time.time() result = str(stop_time - start_time) pass #作成途中 class LogScreen(Screen): pass class GpsApp(App): def build(self): sm = ScreenManager() sm.add_widget(MenuScreen(name='menu')) sm.add_widget(StopwatchScreen(name='Stopwatch')) sm.add_widget(ResultScreen(name="Result")) sm.add_widget(LogScreen(name="Log")) return sm def __init__(self, **kwargs): super(GpsApp, self).__init__(**kwargs) self.title = "GPS" if __name__ == "__main__": GpsApp().run()

kivy

<MenuScreen>: canvas.before: Color: rgba: 1, 1, 1, 1 Rectangle: pos: self.pos size: self.size GridLayout: rows: 2 cols: 1 Button: text_size: self.size valign: "top" color: 0, 1, 0, 1 font_size: "30" bold: True text: "Drive_Logger" on_press: root.manager.current = 'Stopwatch' Button: text_size: self.size valign: "top" color: 0, 1, 0, 1 font_size: "30" bold: True text: "Log" on_press: root.manager.current = 'Log' <StopwatchScreen>: canvas.before: Color: rgba: 1, 1, 1, 1 Rectangle: pos: self.pos size: self.size GridLayout: rows: 2 cols: 2 Label: text_size: self.size valign: "top" color: 0, 1, 0, 1 font_size: "30" bold: True text: root.get_datetime().zikan Label: text_size: self.size valign: "top" color: 0, 1, 0, 1 font_size: "30" bold: True text: root.get_datetime.place Button: text_size: self.size valign: "top" color: 0, 1, 0, 1 font_size: "30" bold: True text: "Go!" on_press: root.get_datetime() Button: text_size: self.size valign: "top" color: 0, 1, 0, 1 font_size: "30" bold: True text: "Arrived!" on_press: root.arrived_clicked() <ResultScreen> canvas.before: Color: rgba: 1, 1, 1, 1 Rectangle: pos: self.pos size: self.size GridLayout: rows: 2 cols: 1 Label: text_size: self.size valign: "top" color: 0, 1, 0, 1 font_size: "30" bold: True text: root.result Button: text_size: self.size valign: "top" color: 0, 1, 0, 1 font_size: "30" bold: True text: "Back to menu" on_press: root.manager.current = 'menu' <LogScreen>: canvas.before: Color: rgba: 1, 1, 1, 1 Rectangle: pos: self.pos size: self.size GridLayout: rows: 1 cols: 4 Button: text_size: self.size valign: "top" color: 0, 1, 0, 1 font_size: "30" bold: True text: "Back to menu" on_press: root.manager.current = 'menu'

試したこと

text: root.placeだと
AttributeError: 'StopwatchScreen' object has no attribute 'place'

text: root.place()だと
AttributeError: 'function' object has no attribute 'place'

その他、似たようなものを作っておられる方のブログを参照させていただいたりしました。もし参照すべきマニュアル等ありましたらそちらも併せて教えていただけると幸いです。読んで勉強します。

補足情報(FW/ツールのバージョンなど)

PyCharm 2020.3.5 (Community Edition)
Build #PC-203.7717.81, built on March 25, 2021
Runtime version: 11.0.10+8-b1145.96 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
macOS 10.16
GC: ParNew, ConcurrentMarkSweep
Memory: 990M
Cores: 4

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

TakaiY

2022/02/16 01:12

質問に提示されているコードでは、そのエラーは出ないのではないかと思います。 提示のコードを実行したときのエラーメッセージを確認ください。
TakaiY

2022/02/16 01:13

もしくは、エラーが出ているところが提示のコード以外の場所なのか?
noggi

2022/02/16 13:56

丁寧にみていただいてありがとうございます。全コード追記しましたので、今一度ご覧いただけると幸いです。よろしくお願いします。
noggi

2022/02/16 14:03

def の中に入れると挙動がおかしくなるようです。defから出したらだいたい動かせていると思います。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。