質問するログイン新規登録

Q&A

解決済

2回答

333閲覧

Python selenium リスト格納 try except

kashinomori

総合スコア19

Python

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

0グッド

0クリップ

投稿2025/06/29 00:03

0

0

実現したいこと

変数comment1-20において、それぞれ対応するコメントを事前に格納しておりまして一部if条件で格納が実行されるものも含みます(以下ソースコード参照)。
これらをまとめてリストに集約し、tkinterのmessageに反映(箇条書き)するためにはどのようにすればよいのでしょうか。初心者につき厳しい意見もあるかと存じます、なかなか理解ができなかったためこのたび相談させてください。

発生している問題・分からないこと

コメントを一つのリストに集約し、tkinterのmessageに反映(箇条書き)するためにはどのようにすればよいのでしょうか。もしくは他のやり方があればぜひご教示いただけますでしょうか?

該当のソースコード

comment1 = 'test1' comment2 = 'test2' text = 'あいうえお' if 'か' in text: comment3 = 'test3' comment4 = 'test4' #以下続く #↓以下はtkinterのコード抜粋です。comments=上記のコメントを集めたものです。参考までに記載しております message = tkinter.Message(width=400,text=comments)

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

1日tryしたり調べても堂々巡りで解決できそうになく、ご教授いただければ幸いです。

補足

特になし

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

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

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

meg_

2025/06/29 04:32 編集

> コメントを一つのリストに集約し、tkinterのmessageに反映(箇条書き)するためにはどのようにすればよいのでしょうか。 分らないのは「コメントを一つのリストに集約」ですか?tkinterの使い方は分かる、ってことで良いでしょうか? > Python selenium リスト格納 try except 質問タイトル中の「selenium」「try except」って何ですか?質問とどう関係していますか? 質問タイトルと質問内容が不一致ですと回答がつきにくくなるかと思います。
guest

回答2

0

箇条書きということであれば tkhtmlview を利用する方法も考えられます。

python

1import tkinter as tk 2from tkhtmlview import HTMLScrolledText 3 4root = tk.Tk() 5 6text = 'あいうえお' 7comment3 = None 8if 'か' in text: 9 comment3 = 'test3' 10 11html = f''' 12<h3 style="text-align: center;">箇条書き</h3> 13<ul> 14 <li>test1</li> <!-- comment 1 --> 15 <li>test2</li> <!-- comment 2 --> 16 <!-- comment 3 --> 17 {"<li>"+comment3+"</li>" if comment3 is not None else ""} 18 <li>test4</li> <!-- comment 4 --> 19 <li style="color: red">テスト5</li> <!-- comment 5 --> 20 <li>test6</li> <!-- comment 6 --> 21 <li>test7</li> <!-- comment 7 --> 22 <li>test8</li> <!-- comment 8 --> 23 <li>test9</li> <!-- comment 9 --> 24 <li>test10</li> <!-- comment 10 --> 25 <li>test11</li> <!-- comment 11 --> 26 <li>test12</li> <!-- comment 12 --> 27 <li>test13</li> <!-- comment 13 --> 28 <li>test14</li> <!-- comment 14 --> 29 <li>test15</li> <!-- comment 15 --> 30 <li>test16</li> <!-- comment 16 --> 31 <li>test17</li> <!-- comment 17 --> 32 <li>test18</li> <!-- comment 18 --> 33 <li>test19</li> <!-- comment 19 --> 34 <li>test20</li> <!-- comment 20 --> 35</ul> 36''' 37 38html_text = HTMLScrolledText(root, html=html, background='#D9D9D9', width=30, height=10) 39html_text.pack() 40root.mainloop()

イメージ説明

投稿2025/06/29 06:29

編集2025/06/29 07:21
melian

総合スコア21571

kashinomori

2025/06/29 07:49

melianさま、いつもありがとうございます。箇条書きの方法の丁寧にありがとうございました。参考にさせていただきます。
guest

0

ベストアンサー

複数行からなる文字列は、文字列のリストだろうと思っているのかもしれませんし、データとして 扱うならそれが正しいのですが、、特に表示の場合、改行を含んだ1つの文字列とすることが多いです。実は通常のテキストファイルも、改行を含んだ一つながりのテキストとして表現されています。

tkinterのmessageに反映(箇条書き)

tkinter.Messageは文字列を表示するためのウィジェットなので、リストではなく、文字列に改行文字(\n)を含めてやればそこで改行されて表示されます。
ちなみに、Messsageは複数行に対応しているからできるのであって、Labelのように対応していないものは、改行文字を入れても改行されません。

表示したいアイテムがcommentsに文字列のリストとして入っている場合、それらを改行で区切られた1つのテキストに変換してやればいいということになります。
やりかたはいくつかあります。

わかりやすくするなら

python

1message_text = "" 2for m in messages: 3 message_text += "* " + m + "\n"

始めに空の文字列を用意し、後ろに改行文字を、先頭に"*"を追加しなからリストの内容を追加していっています。これでmessage_textにメッセージを改行でつないが文字列ができあがります。
一つ注意ですが、この方法だと、一番最後に改行が入ります。不要なら取り除く必要があります。

リストの文字列を改行で区切って並べる方法でよくつかう別の方法に、文字列の joinメソッドを使う方法があります。

python

1message_text = "\n".join(messeges)

これで、messagesに入っている文字列の間に改行を挟んだ文字列ができあがります。末尾に改行は入りません。
ただし、前のコードで書いたような、先頭に「*」を追加するようなことはできません。事前に加工するなどの工夫が必要になります。


コメントを見て追記

これらをまとめてリストに集約し、tkinterのmessageに反映(箇条書き)するためにはどのようにすればよいのでしょうか。

「これらをまとめてリストに集約」のところもわかないということですかね?

まず、「これら」ですが、この書き方は筋が悪いです。特に、コメント1,2,3にただの順番以上の意味が無い場合は悪手と言えます。
以前にも書きましたが、番号付き変数に値を入れたくなったら、それはリストなどの出番です。まして、今回のように最終的にリストにしたいのであればなおさらです。

python

1messages = [] 2 3messages.append('test1') 4messages.append('test2') 5text = 'あいうえお' 6if 'か' in text: 7 messeges.append('test3') 8messages.append('test4')

もし、message1などの変数がすでに存在して、変更することが困難であるなら、同じ方法で地道に格納するくらいしか思いつきませんね。
使われている変数名の取得にlocals()など使えるでしょうが、そんなコードは書きたくありませんね。

python

1messages = [] 2messages.append(comment1) 3messages.apped(comment2) 4if comment3 in locals(): 5 messages.append(comment3) 6messages.append(comment4)

投稿2025/06/29 04:20

編集2025/06/29 05:19
TakaiY

総合スコア14669

kashinomori

2025/06/29 07:55

TakaiY様、いつも有り難うございます。毎度参考になります。ベストアンサーとさせていただきますが、以下のご教示のように実施しても、test1とtest2しか格納されておりません。if文の箇所はnameerrorとなっておりましたのでtry-exceptを実施しても同様の結果でした。原因は推測できますでしょうか?? except exception as e: pass 1messages = [] 2 3messages.append('test1') 4messages.append('test2') 5text = 'あいうえお' 6if 'か' in text: 7 messeges.append('test3') 8messages.append('test4')
TakaiY

2025/06/29 09:09

コードがこのままだとすると、messagesのつづりが間違えているからでしょうね。 messeges.append('test3') name errorは定義されていない変数などを使うと起きるエラーですから、エラーメッセージをちゃんと読むとわかります。 変数名のつづり間違えはよくあるエラー原因なので意識するとともに、エディタの補完機能やチェック機能などを使って、防止するのがいいでしょう。
TakaiY

2025/06/29 09:26

ちなみに、コードを作っていてよくわからない例外が発生したからtry exceptで対処しようとするのは間違えた対応です。try-exceptは**原因がわかっている例外**に対応するために使うものです。
kashinomori

2025/06/30 00:46

どうもありがとうございます。if文の条件に合致しないためその要素はnameerrorが帰ってきておりますので、ifの前にnoneの要素''を格納し、if文でelse Noneであれば格納するという方法にて対応できそうでした。一応報告までですがよろしくお願い申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問