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

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

ただいまの
回答率

91.39%

  • MacOS(OSX)

    1355questions

    MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

  • Python 2.7

    923questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

[kivy][python2.7]画面の行き来をしたい

解決済

回答 1

投稿 2017/11/20 16:15

  • 評価
  • クリップ 0
  • VIEW 64

night9071

score 7

前提・実現したいこと

現状、ファイルの数が4個あります。

  • main.py
  • test.kv
  • tops1
  • tops2

main.pyはtest.kvでレイアウトしています。
main.pyからtops1に移動し、tops1からtops2に移動※1しています。
tops1,tops2のレイアウトは各.py内でBuilder.load_string(r'''~''')で指定しています。

<tops2からtops1>,<tops2からmain>など、ページを戻る操作がしたいです。
以下のプログラムだと、インポートできないとエラーが発生します。
importしたプログラムからimportで戻ることはできないのでしょうか?

前質問:[kivy][python]kivyファイルを複数使いたい

[エラー]

Traceback (most recent call last):
   File "main.py", line 31, in <module>
     from tops1 import Tops1
   File "/Users/admin/Desktop/python/tops1.py", line 24, in <module>
     from tops2 import Tops2
   File "/Users/admin/Desktop/python/tops2.py", line 24, in <module>
     from tops1 import Tops1
 ImportError: cannot import name Tops1
main.py
import文 省略 〜
from tops1 import Tops1
class TextWidget(BoxLayout):
    def __init__(self, **kwargs):
        super(TextWidget, self).__init__(**kwargs)
        pass
    def buttonClicked_tops(self):
        self.clear_widgets()
        tops =Tops1()
        self.add_widget(tops)

class TestApp(App):
    def __init__(self, **kwargs):
        super(TestApp, self).__init__(**kwargs)
        self.title = 'Apomol'
        reload(sys)
        sys.setdefaultencoding('utf-8')
        Window.clearcolor = [0.999,0.89,0.999,1]

    def build(self):
        return TextWidget() 

if __name__ == '__main__':
    TestApp().run()
test.kv 
TextWidget: # ルートに追加
<TextWidget>:
    orientation: 'vertical'
    ScreenManager:
        size_hint_y: 0.7
        id: scrmgr
        #TOPページ
        Screen:
            name: 'top'
        #Main1ページ
        Screen:
            name: 'main1'
            BoxLayout:
                orientation:'vertical'
                size:root.size
                Label:
                    id:label2
                    font_size:20
                    text:'種類を選択'
                    color:[0.2,0.2,0.2,1]
                Button:
                    id:button_tops
                    text:'トップス'
                    size_hint_y:0.3
                    on_press:root.buttonClicked_tops()                     
                Button:
                    id:button_bottoms
                    text:"ボトムス"
                    size_hint_y:0.3
                    on_press:root.buttonClicked_bottoms()
                Button:
                    id:button_autor
                    text:"アウター"
                    size_hint_y:0.3
                    on_press:root.buttonClicked_autor()
        #Main1>bottoms
        Screen:
            name: 'bottoms'
        #Main1>autor
        Screen:
            name: 'autor'
            〜 省略 〜

        #Main2  
        Screen:
            name: 'main2'
            〜 省略 〜

    #MENU_bar        
    BoxLayout:
        size_hint_y: 0.1
        padding: 10,10,20, 10
        Button:
            text: "top"
            font_size: 20
            on_press: scrmgr.current = 'top'
        Button:
            text: "main1"
            font_size: 20
            on_press: scrmgr.current = 'main1'
        Button:
            text: "main2"
            font_size: 20
            on_press: scrmgr.current = 'main2'
tops1.py 
import文 省略 〜
from tops2 import Tops2
class Tops1(Widget):
    def buttonClicked(self):
        pass
    def buttonClickedNext(self):
        self.clear_widget()
        tops2 = Tops2()
        self.add_widget(tops2)
Builder.load_string(r'''
<Tops1>:
    Button:
        text:'<  前のページに戻る'
        pos:50,550
        size:200,50
    Button:
        text:'[カテゴリ選択]に戻る'
        pos:300,550
        size:200,50
    Button:
        text:'次のページに進む >'
        pos:550,550
        size:200,50
        on_press:root.buttonClickedNext()    
tops2.py 
import文 省略 〜
from tops1 import Tops1
class Tops2(Widget):
    def buttonClicked(self):
        pass
    def buttonClickedBack(self):
        self.clear_widget()
        tops1 = Tops1()
        self.add_widget(tops1)
    def buttonClickedNext(self):
        pass
Builder.load_string(r'''
<Tops1>:
    Button:
        text:'<  前のページに戻る'
        on_press:root.buttonClickedBack()
        pos:50,550
        size:200,50
    Button:
        text:'[カテゴリ選択]に戻る'
        pos:300,550
        size:200,50
    Button:
        text:'次のページに進む >'
        pos:550,550
        size:200,50   

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

python2.7
kivy
MacOS

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

PCからじゃないので確認はできてませんが、これに該当しませんか?

投稿 2017/11/20 19:56

編集 2017/11/20 20:14

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/21 10:14

    回答ありがとうございます!
    なるほど、関数の中でimportすればいいんですね

    キャンセル

  • 2017/11/21 17:30

    ええ、それかfromを使わないimportのどちらかで対処できるかと

    キャンセル

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

ただいまの回答率

91.39%

関連した質問

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

  • MacOS(OSX)

    1355questions

    MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

  • Python 2.7

    923questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。