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

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

ただいまの
回答率

91.35%

  • Python

    3821questions

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

  • MacOS(OSX)

    1360questions

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

  • Python 2.7

    925questions

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

[python2.7][kivy] 別ディレクトリから画像を呼び出し&並べて表示

解決済

回答 1

投稿 2017/11/29 10:58 ・編集 2017/11/29 10:58

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

night9071

score 7

前提・実現したいこと

現在、別ディレクトリにある画像の表示を全て手入力で行なっています。(図1)
Buttonにしているのは仕様です。
見た目はこのままで、自動化させて行きたいです。

図2は自動化しようとしてるpyファイルの結果です。
画像のPATHを取得して表示することはできましたが、どうにもposが弄れず重なってしまいます。
for文のたびにposをずらせればいいとは思うのですが、うまく行きません
よろしくお願いします

※図1
図1
※図2
イメージ説明

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

図1のコード

import文 省略〜

class Tops1(Widget):
    def buttonClickedMenu(self):
        self.clear_widgets()
        sys.path.append('../../')
        from main1 import Main1
        main1 = Main1()
        self.add_widget(main1)
    def buttonClickedNext(self):      
        self.clear_widgets()
        sys.path.append('./page/main1/tops/')
        from tops2 import Tops2
        tops2 = Tops2()
        self.add_widget(tops2)
Builder.load_string(r'''
<Tops1>:
    Button:
        text:'<  トップス選択に戻る'
        pos:5,547
        size:200,50
        on_press:root.buttonClickedMenu()
    #Button:
        #text:'<  BACK'
        #pos:230,10
        #size:100,50
        #on_press:root.buttonClickedBack()
    Label:
        text:'<トップス1>'
        pos:300,10
        size:200,50
        font_size:18
        color:0.1,0.1,0.1,1
    Button:
        text:'NEXT >'
        pos:470,10
        size:100,50
        on_press:root.buttonClickedNext()       
    BoxLayout:
        pos:40,425
        Button:
            size: 120,120
            size_hint: None, None
            Image:
                source: "page/gallery/bird.png"
                center_x: self.parent.center_x
                center_y: self.parent.center_y
        Button:
            size: 120,120
            size_hint: None, None
            Image:
                source: "page/gallery/bird.png"
                center_x: self.parent.center_x
                center_y: self.parent.center_y
        Button:
            size: 120,120
            size_hint: None, None
            Image:
                source: "page/gallery/bird.png"
                center_x: self.parent.center_x
                center_y: self.parent.center_y
        Button:
            size: 120,120
            size_hint: None, None
            Image:
                source: "page/gallery/bird.png"
                center_x: self.parent.center_x
                center_y: self.parent.center_y
        Button:
            size: 120,120
            size_hint: None, None
            Image:
                source: "page/gallery/bird.png"
                center_x: self.parent.center_x
                center_y: self.parent.center_y
        Button:
            size: 120,120
            size_hint: None, None
            Image:
                source: "page/gallery/bird.png"
                center_x: self.parent.center_x
                center_y: self.parent.center_y
      〜以下、同じ文が画像数分続きます〜

''')

図2のコード

import文 省略〜
class Picture(Widget):  #画像の表示
    #data_dir_path = u"./page/gallery/"
    #file_list = os.listdir(r"./page/gallery/")
    source = StringProperty(None)
    x = 400
    y = 100
    x = NumericProperty(x-100)
    y = NumericProperty(y-10)
class Tops3(Widget):     
    hogehoge = StringProperty()
    def __init__(self, **kwargs):
        super(Tops3, self).__init__(**kwargs)
        data_dir_path = u"./page/gallery/"
        file_list = os.listdir(r'./page/gallery/')
        curdir = dirname(__file__)
        for file_name in file_list:
            root, ext = os.path.splitext(file_name)
            if ext == u'.png' or u'.jpeg' or u'.jpg':
                picture = Picture(source= data_dir_path + file_name,rotation=randint(-30, 30))
                self.add_widget(picture)         
    def buttomClickedMenu(self):    #トップページに戻る
        self.clear_widgets()
        sys.path.append('../')
        from main import TextWidget
        menu = TextWidget()
        self.add_widget(menu)

Builder.load_string(r'''
<Tops3>:
    Button:
        text:'<TOPに戻る'        
        pos:5,547
        size:200,50
        on_press:root.buttomClickedMenu()

<Picture>:
    # each time a picture is created, the image can delay the loading
    # as soon as the image is loaded, ensure that the center is changed
    # to the center of the screen.
    on_size: self.center = win.Window.center
    #size: image.size
    size_hint: None, None
    Image:
        id: image1
        source: root.source
        pos:root.x,root.y
''')

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

python2.7
kivy
MacOS

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

check解決した方法

0

初歩的な問題で、posの初期宣言の位置を間違えていたみたいです。
以下のコードにしたら、重なることなく表示されました。

class Picture(Widget):  #画像の表示
    source = StringProperty(None)
class Tops3(Widget):     
    hogehoge = StringProperty()
    def __init__(self, **kwargs):
        super(Tops3, self).__init__(**kwargs)
        data_dir_path = u"./page/gallery/"
        file_list = os.listdir(r'./page/gallery/')
        curdir = dirname(__file__)
        pos_x = 40
        pos_y = 300
        for file_name in file_list:
            root, ext = os.path.splitext(file_name)
            pos_x += 100
            if ext == u'.png' or u'.jpeg' or u'.jpg' :
                picture = Picture(source= data_dir_path + file_name,rotation=randint(-30, 30),x = pos_x,y = pos_y)
                self.add_widget(picture) 

投稿 2017/11/29 11:21

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

ただいまの回答率

91.35%

関連した質問

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

  • Python

    3821questions

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

  • MacOS(OSX)

    1360questions

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

  • Python 2.7

    925questions

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