ここから本文です

python-pptxについて質問です。

oha********さん

2017/4/2321:51:31

python-pptxについて質問です。

python3.5.2を使っていて、python-pptxも最新のものを取り入れているはずなんですけど、TextFrameオブジェクトでフォントの大きさを設定できなくて困っています。font.sizeでやろうとしたらAttributeError: 'TextFrame' object has no attribute 'font'と返ってきてしまいました。どうしたらよいでしょうか。


以下、ソースコードです。

from pptx import Presentation
from pptx.util import Inches
from pptx.util import Pt

prs = Presentation()

img_path = 'P2220052.JPG'
SLD_LAYOUT_TITLE_AND_CONTENT = 8
slide_layout = prs.slide_layouts[SLD_LAYOUT_TITLE_AND_CONTENT]

shapes = prs.slides.add_slide(slide_layout).shapes
shapes.placeholders[1].text = "バンド名"
shapes.placeholders[2].text = 'バンドメンバー一覧'
shapes.placeholders[0].text = "演奏曲 波乗りジョニー"

left = Inches(1.8)
top = Inches(5.0)
height = (2.0)
width = (1.0)

txBox = shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
tf.font.size = Pt(15)

tf.text = "(演奏時間をここに入れる)"




top = Inches(1.25)
left = Inches(1.8)
height = Inches(3.9)
pic = shapes.add_picture(img_path, left, top, height = height)

prs.save('test5.pptx')

ちなみにこれは、大学の文化祭においてストリートライブをやるのですが、その際に出演するバンド(100以上)を紹介するパンフレットのテンプレを作っている最中です。何か、見た目をよくしたりするようなアイデアがあったら教えてもらえると本当に喜びます。
もしくは、python-pptxの使い方について詳しく取り上げている日本語のサイト、もしくは書籍などあれば教えていただけると助かります。

この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。

閲覧数:
310
回答数:
2
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

kar********さん

2017/4/2400:04:03

https://python-pptx.readthedocs.io/en/latest/api/text.html#pptx.tex...

ここに _Paragraph には font プロパティ(Font オブジェクト)がある、と書いてあり、

https://python-pptx.readthedocs.io/en/latest/api/text.html#pptx.tex...

ここにはTextFrame オブジェクトの paragraphs プロパティは _Paragraph オブジェクトの sequence であると書いてあるので、たぶんこれ1つ1つの font プロパティをセットすればいいんじゃないでしょうか。

ただし、この代入について注意してください。

> tf.text = "(演奏時間をここに入れる)"

TextFrameのfontプロパティについての説明を読むと、
"Assignment replaces all text in the text frame with a single paragraph containing the assigned text."
つまり 文字列を代入すると その text frame の paragraphs は 新しい 1個の paragraph で置き換えられてしまう、とあります。

なのでparagraph のフォントなどの設定は、この代入のあとに行わないと意味がありません。

ということで以下のようにすればいいと思います。

txBox = shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
tf.text = "(演奏時間をここに入れる)"
tf.paragraphs[0].font.size = Pt(15)

  • kar********さん

    2017/4/2400:05:46

    訂正:

    ☓ TextFrameのfontプロパティについての説明を読むと、
    ○ TextFrameのtextプロパティについての説明を読むと、

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2017/4/30 13:17:11

分かりやすい説明ありがとうございます!
無事、解決いたしました。

ベストアンサー以外の回答

1〜1件/1件中

dis********さん

2017/4/2322:30:32

試してないですが、リファレンスを見る限り
エラーにある通りTextFrameオブジェクトはFontプロパティを持っていませんので、Fontの定義からいくと
tf.font.size = Pt(15)

tf.text.font.size = Pt(15)
では?

下手に日本語情報探すのに時間かけるよりは
https://python-pptx.readthedocs.io/en/latest/index.html
を読むか、Google翻訳とかに放り込んで訳した方が手っ取り早いし、間違いのない情報を得られますよ。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる