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

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

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

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

Python

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

Q&A

解決済

2回答

2036閲覧

ModuleNotFoundError: No module named 'フォルダ名'

mmmiii313131

総合スコア3

Kivy

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

Python

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

0グッド

0クリップ

投稿2021/06/18 00:02

編集2021/06/18 08:47

別の質問にて、チャートをkivyGUI上に表示させるコードについて質問しまして、そのとき一旦はチャートが表示されたのですが、KV言語で編集しようとしても反応せず、コードを書き直しました。ですが、ModuleNotFoundError: No module named 'フォルダ名'というエラーが出てしまい、KV言語での編集はおろか、チャートも表示されなくなってしまいました。

python

1from datetime import datetime 2from logging import root 3from os import kill 4from stock_sns_project.chart_plot import ManiScreen 5from kivy.uix.floatlayout import FloatLayout 6from kivy.uix.layout import Layout 7from kivy_garden.graph import Graph, MeshLinePlot 8##https://kivy-garden.github.io/graph/flower.html ↑ 9from kivy.app import App 10from datetime import datetime 11import sys 12from numpy import right_shift, rint 13from yahoo_finance_api2 import share 14from yahoo_finance_api2.exceptions import YahooFinanceError 15from datetime import datetime 16from kivy.uix.scrollview import ScrollView 17from kivy.app import runTouchApp 18from kivy.uix.screenmanager import ScreenManager, Screen 19from kivy.core.window import Window 20from kivy.base import runTouchApp 21from kivy.uix.label import Label 22from kivy.uix.boxlayout import BoxLayout 23 24class Chart_plot(BoxLayout): 25 def __init__(self, **kwargs): 26 super(FloatLayout, self).__init__(**kwargs) 27 pass 28 29 def chart(self): 30 31 #データを読み込んで分割する 32 my_share = share.Share('MSFT') 33 symbol_data = None 34 try: 35 symbol_data = my_share.get_historical(share.PERIOD_TYPE_DAY, 36 60, 37 share.FREQUENCY_TYPE_MINUTE, 38 5) 39 except YahooFinanceError as e: 40 print(e.message) 41 sys.exit(1) 42 43 #data = symbol_data['timestamp'] 44 #new_data = [datetime.utcfromtimestamp(int(data[i]/1000)) for i in range(len(data))] 45 prices = symbol_data['close'] 46 price = prices[:2000] 47 max_price = max(price) 48 min_price = min(price) 49 #print(min_price) 50 51 #プロットする 52 graph = Graph(xlabel='datetime', ylabel='price', x_ticks_minor=5, 53 x_ticks_major=25, y_ticks_major=10, 54 y_grid_label=False, x_grid_label=False, padding=5, 55 x_grid=True, y_grid=True, xmin=0, xmax= 2000, ymin = min_price - 5, ymax = max_price + 5) 56 57 plot = MeshLinePlot(color=[1, 0, 0, 1]) 58 plot.points = [(i, price[i]) for i in range(0, 2000)] 59 graph.add_plot(plot) 60 graph.width = 2000 61 62 graph.size_hint_x = None 63 return graph 64 65 66 def scroll_chart(self): 67 root = ScrollView(FloatLayout) 68 root.add_widget(Chart_plot.chart.build()) 69 70 runTouchApp(root) 71 72 73class ChartMainScreen(BoxLayout): 74 pass 75 76class ChartMainApp(App): 77 def build(self): 78 return ChartMainScreen() 79 80if __name__ == '__main__': 81 ChartMainApp().run()

kivy

1#:kivy 2.0.0 2 3#:import MeshLinePlot 4<ChartMain>: 5 BoxLayout: 6 orientation: 'vertical' 7 size_hint_y: 0.2 8 text: 'MSFT Chart' 9 10 Chart_plot: 11 id: graph_test 12 plot: MeshLinePlot 13 14 15 BoxLayout: 16 orientation: 'vertical' 17 18<Chart_plot>:

https://chaika.hatenablog.com/entry/2018/08/24/090000

こちらのページでファイルをインポートしてみてりしましたが、同じエラーが出てしまいます。
解決策わかる方、どうかよろしくお願いします。

コード全体が滅茶苦茶だとのこと(;;)質問者からの依頼により、Buttonなどを並べたシンプルなコード載せます

python

1from kivy.config import Config 2Config.set('graphics', 'width', '640') 3Config.set('graphics', 'height', '480') 4 5from kivy.uix.textinput import TextInput 6from kivy.app import App 7from kivy.uix.widget import Widget 8from kivy.uix.label import Label 9from kivy.properties import StringProperty 10 11from kivy.core.text import LabelBase, DEFAULT_FONT 12from kivy.resources import resource_add_path 13 14resource_add_path("font") 15LabelBase.register(DEFAULT_FONT, "NotoSansJP-Regular.otf") 16#LabelBase.register(DEFAULT_FONT, "Exo2-Regular.ttf") 17 18from random import randint 19 20#--------------------------------------- 21 22class ImageWidget(Widget): 23 def __init__(self, **kwargs): 24 super(ImageWidget, self).__init__(**kwargs) 25 pass 26 27 def login_ID(self): 28 pass 29 30 def login_PW(self): 31 pass 32 33 def login_button(self): 34 pass 35 36class login_logonApp(App): 37 def __init__(self, **kawargs): 38 super(login_logonApp, self).__init__(**kawargs) 39 self.title = 'LoginLogon' 40 41if __name__ == '__main__': 42 login_logonApp().run() 43

kivy

1#:kivy 2.0.0 2 3ImageWidget: 4 5<ImageWidget>: 6 7 canvas.before: 8 Color: 9 rgba: 1, 1, 1, 1 10 Rectangle: 11 pos: self.pos 12 size: self.size 13 14 BoxLayout: 15 orientation: 'vertical' 16 size: root.size 17 18 Label: 19 id: title_login 20 font_size: 50 21 text: 'VERBIN' 22 color: .100, .100, .100, .50 23 font_name: "Exo2-Regular.ttf" 24 25 BoxLayout: 26 orientation: 'vertical' 27 padding: 50, 20, 50, 30 28 29 Label: 30 id: user_id_label 31 font_size: 35 32 text: 'ID' 33 color: .3, .3, .3, .85 34 text_size: self.size 35 halign: 'left' 36 font_name: "Exo2-Regular.ttf" 37 38 TextInput: 39 id: user_id_input 40 font_size: 12 41 color: 0.6, 0.6, 0.6, 0.6 42 background_color: .2, .2, .35, .100 43 44 BoxLayout: 45 orientation: 'vertical' 46 padding: 50, 0, 50, 22 47 Label: 48 id: user_PW_label 49 font_size: 35 50 text: 'PassWord' 51 color: .3, .3, .3, .85 52 text_size: self.size 53 halign: 'left' 54 font_name: "Exo2-Regular.ttf" 55 56 TextInput: 57 id: user_PW_input 58 font_size: 12 59 color: .40, .40, .40, .40 60 background_color: .2, .2, .35, .100 61 62 Button: 63 text: '会員登録がまだの方' 64 font_size: 10 65 background_normal: '' 66 color: .1, .3, .30, .40 67 68 Button: 69 text: 'LOGIN' 70 background_normal: '' 71 background_color: 1, .3, .4, .85 72 font_size: 50 73 font_name: "Exo2-Regular.ttf" 74 75

widgetを縦に並べただけのコード

今書いてみましたが、うまく動作しませんでした。

python

1from kivy.app import App 2from kivy.uix.boxlayout import BoxLayout 3from kivy.uix.label import Label 4 5class Screen(BoxLayout): 6 pass 7 8class chart2App(App): 9 pass 10 11chart2App().run()

kivy

1 2 3 4#:kivy 2.0.0 5Screen: 6 7 8<Screen>: 9 orientation: 'vertical' 10 size: root.size 11 Label: 12 text: 'おはよう' 13 14 Button: 15 text: 'konnnitiha' 16 17 Button: 18 text: 'Hello, Python'

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gottadiveintopy

2021/06/18 01:58

別の質問の方でも書きましたが、kivyだけを使ったprogramを書くことから始めてそれができてから徐々に他のlibraryを組み込んでいってください。code全体がもうメチャクチャなので。 例えばLabelとButtonを縦に並べて表示するだけのprogramを作れますか?
gottadiveintopy

2021/06/18 02:41

これはネットで拾った動きそうなcodeを貼り付けただけですよね?私が言ったことを行うだけの最小限のcodeを自分で書けますか?
mmmiii313131

2021/06/18 02:43

違います!自分で書きました。。。
mmmiii313131

2021/06/18 02:46

これ書くのにもまる一日かかりましたけど、、、
gottadiveintopy

2021/06/18 02:57

それじゃあ訊きますけど 質問のcodeでは runTouchApp(root) を呼んでいるのに こっちでは呼んでいないのは何故ですか?
mmmiii313131

2021/06/18 03:10

loginのほうはlogin_logonApp(App)を呼び出して走らせるためにlogin_logonApp().run()と記述して、 質問のほうはスクロールさせるためにrunTouchApp()を呼び出しているのではないですか?
mmmiii313131

2021/06/18 03:19

スクロールもよくわからなくて、、、このコードとは違うんですけど、グラフのクラスと別にクラスを用意して、関数の中に root = ScrollView() root.add_widget(graph_plotApp.build()) #graph_plotApp().run() runTouchApp(root) と記述すると動かなくて、クラスの中に直接書くと動くんです。。 決まりがよくわかってません
gottadiveintopy

2021/06/18 06:49 編集

> 質問のほうはスクロールさせるためにrunTouchApp()を呼び出しているのではないですか? 違います。Kivyというか多分GUI全般なんですが、GUI programにはevent loopという物が要ります。これをGUIを正常に動かすのに必要な心臓のような物だと思ってください。program開始時に心臓を動かし始め、ユーザーが閉じるボタンを押すなどして終了の合図が来たら心臓も止める、みたいな感じです。Kivyにおいてこの心臓を動かす役割を担っているのが runTouchApp() と App().run()です。この心臓なんですが(少なくともKivyにおいては)一度しか動かしてはいけないので、質問のcodeのように一つのprogram内に両方の関数が現れる事は基本無いですし、片方を複数回呼び出すなんてこともあってはいけないです。 ここで「どっちの関数を使えばいいの?」と思ったかもしれないですが、runTouchApp()は内部用のものなのでApp().run()を使うようにしてください。runTouchApp()を使うと幾つかの機能が使えなかったりもするので。 > クラスの中に直接書くと動くんです これはpython言語自体の話になりますが、class直下に書いた物はそのclassのcodeが読み込まれる際に実行されるので class MyClass:   print('A') のprint('A')は実行されるタイミングだけでいうならclassの外に print('A') と書くのとなんら変わらないです。関数の中に書いた時にだけ動かないのなら、その関数がそもそも呼ばれていない可能性を疑ってください。そしてclass直下でwidgetの作るのは一般的なやり方じゃないのでやめたほうが良いです。 python文法からKivyの使い方まで分からない事は多いと思いますが、だからといって分からない物を一気にprogram内に組み込むようなことはせず、分からない部分を一つ試すだけの最小限のcodeを別に書いて各個撃破していってください。とりあえずLabelとButtonを縦に並べて表示するだけの"最小限"のprogramを書いてみてくれませんか?widgetが三個あればできると思いますが。
mmmiii313131

2021/06/18 07:23

試しに書いてみましたが「Hello,Python」ボタンしか表示されませんでした(;;)
gottadiveintopy

2021/06/18 08:14

Kivyには元々Screenという名前のwidgetがあってそれと自作のScreenの名前が被っているのが原因なので、名前を別の何か(例えばMyWidget)に変えてみてください。 質問のcodeなんですけど root = ScrollView(FloatLayout) root.add_widget(Chart_plot.chart.build()) の部分って何を参考にして書きましたか
gottadiveintopy

2021/06/18 08:29

class Chart_plot(BoxLayout): def __init__(self, **kwargs): super(FloatLayout, self).__init__(**kwargs) pass super()の引数は正しくは class Chart_plot(BoxLayout): def __init__(self, **kwargs): super(Chart_plot, self).__init__(**kwargs) pass ですね。もしpython3系を使っているなら引数無しでもいけます class Chart_plot(BoxLayout): def __init__(self, **kwargs): super().__init__(**kwargs) pass
gottadiveintopy

2021/06/18 08:35

何処にもそういった使い方は見当たらないです。 > 動きました。壊れたのかと思いました。。 良かったです (^_^)
gottadiveintopy

2021/06/18 08:41

本題の`ModuleNotFoundError: No module named 'フォルダ名'`何ですが、importに関するerrorなのでcode内のimport文を省略せずに載せてください。
mmmiii313131

2021/06/18 08:42

root = ScrollView(size_hint=(1, None), size=(Window.width, Window.height)) root.add_widget(layout) runTouchApp(root) のところです、、ScrollViewのところFloatLayout書いたらだめですよね。。
gottadiveintopy

2021/06/18 09:06

> ScrollViewのところFloatLayout書いたらだめですよね。 widgetに別のwidgetを加える時は widget.add_widget(別のwidget) としないといけないですし、加えるのはclassじゃなくてinstanceじゃないといけないです。 ( FloatLayout じゃなくて FloatLayout() ) ただScrollViewは子widgetを一つしか持てないので二回目のadd_widget()を呼んだ時にerrorが起こるのに変わりはないです。
gottadiveintopy

2021/06/18 09:15

importのerror何ですけどcodeを見ただけだとちょっと分からないですね。私ならprojectのあるdirectoryやlibraryの置いてあるdirectory内のテキストファイルの中身を'フォルダ名'で検索してみるかもです。 後、「ネットで拾った動きそうなcodeを貼り付けただけ」とか言ってごめんなさい
mmmiii313131

2021/06/18 09:19

scroll_chart.add_widget(Chart_plot.chart())のChart_plot.chart()は中身はgraphですよね、分けないでchart()の中で、 scroll_chart = ScrollView(size_hint=(1, None),size=(Window.width, Window.height)) scroll_chart.add_widget(graph)にするということでしょうか。
mmmiii313131

2021/06/18 09:21

いやいや!丁寧に教えていただきありがとうございます。。(;;)
gottadiveintopy

2021/06/18 11:08 編集

> 分けないで...にするということでしょうか その方が良いですね。あとchart()関数には@classmethod付けたほうが良いのと、kvファイルの名前がchartmain.kvになってるかも確めてみてください。
mmmiii313131

2021/06/18 09:53

フォルダ名を使ったimport文を消して、(よくわからないインポートをしていた)レイアウト用に新しくクラスを作ってみたら、チャートはまだ表示されませんが、KVファイルでの編集ができるようになりました。
guest

回答2

0

基本的にこのエラーは、

pip install フォルダ名

で解決すると思いますよ。

投稿2021/06/22 11:01

riyo

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

yahoo_finance_api2を使わずにGUIの部分だけ作ったので参考にどうぞ

python

1# main.py 2# 3# [test環境] 4# CPython 3.8.8 5# pip install kivy==2.0.0 kivy_garden.graph==0.4.0 6 7 8from math import sin 9from kivy.app import App 10from kivy_garden.graph import Graph, MeshLinePlot 11from kivy.uix.screenmanager import Screen 12 13 14class ChartMainScreen(Screen): 15 def on_kv_post(self, *args, **kwargs): 16 '''widgetの初期化が完全に終わった後に行いたい処理を書く所''' 17 super().on_kv_post(*args, **kwargs) 18 self.ids.graph_test.add_widget(self.create_graph()) 19 20 @classmethod 21 def create_graph(cls): 22 graph = Graph( 23 xlabel='datetime', ylabel='price', 24 x_ticks_minor=5, x_ticks_major=25, y_ticks_major=10, 25 y_grid_label=False, x_grid_label=False, padding=10, 26 x_grid=True, y_grid=True, xmin=0, xmax=2000, ymin=-1, ymax=1) 27 plot = MeshLinePlot(color=[1, 0, 0, 1]) 28 plot.points = [(i, sin(i /50.)) for i in range(0, 2000)] 29 graph.add_plot(plot) 30 graph.width = 2000 31 graph.size_hint_x = None 32 return graph 33 34 35class ChartMainApp(App): 36 def build(self): 37 return ChartMainScreen() 38 39 40if __name__ == '__main__': 41 ChartMainApp().run() 42

yaml

1# chartmain.kv 2 3#:kivy 2.0.0 4 5<ChartMainScreen>: 6 BoxLayout: 7 orientation: 'vertical' 8 Label: 9 size_hint_y: 0.2 10 text: 'MSFT Chart' 11 12 # graphの貼り付け先 13 ScrollView: 14 id: graph_test

投稿2021/06/18 11:08

gottadiveintopy

総合スコア736

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mmmiii313131

2021/06/18 12:51

@classmethodの使いかたも調べてもうまくいかなかったし、困っていたところです。。 前にyoutubeも見てたんですけど、idってなんでつけるんだろうと思ってました。(その時はidは特に使ってるようではなかった)私にはむつかしすぎました。。。ごめんなさい。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問