🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

PyCharm

エディター・開発ツール

Q&A

解決済

1回答

2847閲覧

[python3]Tkinterウィンドウ上にExcelからの数値リストを縦表示(改行表示)させたい

MM921

総合スコア14

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

PyCharm

エディター・開発ツール

0グッド

0クリップ

投稿2020/12/03 05:22

編集2020/12/03 05:28

前提・実現したいこと

Python初心者です。
tkinterウィンドウ上にExcelからのアルファベットリストをラベルによって縦表示することはできましたが,アルファベットの時のようなコードを書いても数値リストを縦表示することができませんでした。
↓Excel画面
エクセル画面

該当のソースコード

流れとしてExcel画面を作成し,①の.pyファイルを作る。そして①を引用する箇所があるため,②を作ります。アルファベット表示は縦表示でtkinterウィンドウに表示されましたが,数値表示が縦でなく横表示のままになってしまいます。
↓①上記の画面にシートを追加し備品名や個数を追記するプログラムです。

import openpyxl workbook = openpyxl.load_workbook('備品表.xlsx') sheet = workbook["Sheet1"] suppliers = [] for i in range(3, 21): cell_value = sheet.cell(row=i, column=1).value if cell_value not in suppliers: suppliers.append(cell_value) print(suppliers) transaction_amounts = [] for i in suppliers: transaction_amount = 0 for j in range(3, 21): supplier = sheet.cell(row=j, column=1).value if supplier == i: transaction_amount += sheet.cell(row=j, column=2).value transaction_amounts.append(transaction_amount) print(transaction_amounts) new_sheet = workbook.create_sheet("") print(workbook.worksheets) new_sheet["A1"] = "備品名" new_sheet["B1"] = "備品個数" for i, j, k in zip(list(range(3, 21)), suppliers, transaction_amounts): new_sheet.cell(row=i, column=1, value=j) new_sheet.cell(row=i, column=2, value=k) print(list(new_sheet.values)) workbook.save("備品表.xlsx")

↓②tkinterウィンドウ上に備品名(アルファベット)と備品個数(数値)を縦表示したいプログラム

import tkinter import openpyxl root = tkinter.Tk() root.title(u"Software Title") root.geometry("400x300") # 備品表呼び出し workbook = openpyxl.load_workbook('備品表.xlsx') sheet = workbook["Sheet1"] # 備品名リスト作成 suppliers = [] for i in range(3, 21): cell_value = sheet.cell(row=i, column=1).value if cell_value not in suppliers: suppliers.append(cell_value) # 備品名をラベル表示 print(suppliers) a = '\n'.join(suppliers) txt1 = tkinter.Label(root, text=a, font=('Helvetica', '15')) txt1.place(x=20, y=20) # 備品個数リスト作成 transaction_amounts = [] for i in suppliers: transaction_amount = 0 for j in range(3, 21): supplier = sheet.cell(row=j, column=1).value if supplier == i: transaction_amount += sheet.cell(row=j, column=2).value transaction_amounts.append(transaction_amount) print(transaction_amounts) txt1 = tkinter.Label(root, text=transaction_amounts, font=('Helvetica', '15')) txt1.place(x=80, y=20) root.mainloop()

↓③ ②の該当部分

# 備品個数リスト作成 transaction_amounts = [] for i in suppliers: transaction_amount = 0 for j in range(3, 21): supplier = sheet.cell(row=j, column=1).value if supplier == i: transaction_amount += sheet.cell(row=j, column=2).value transaction_amounts.append(transaction_amount) print(transaction_amounts) txt1 = tkinter.Label(root, text=transaction_amounts, font=('Helvetica', '15')) txt1.place(x=80, y=20)

試したこと

txt1 = tkinter.Label(root, text=transaction_amounts, font=('Helvetica', '15'))

transaction_amountsをstrで文字列扱いにして'\n'.joinで改行をしてみましたが,[]が含まれていたり一文字ずつ改行されたりなどうまく表示されませんでした。
Pythonをはじめて日は浅く,知識不足ゆえ何卒ご教示お願い致します。

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

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

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

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

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

guest

回答1

0

自己解決

無事自己解決ができました。この記事を閲覧してくだった方,もしコードを推敲してくださっていた方々がいらしたら感謝いたします。
以下過程,コード全文を掲載いたします。

strを用いてtransaction_amountsを文字列として認識させる。

s = str(transaction_amounts)

文字列として扱っているためsの括弧やカンマが含まれてしまう。これらを除くためパッケージreをインストールし以下のようにコードを書く。

result = re.sub(r"\D", "", s)

2文字ずつに区切って改行させるためパッケージtextwrapをインストールし,以下のようにコードを書く。

w = textwrap.fill(result, 2)

↓コード全文

import tkinter import openpyxl import re import textwrap root = tkinter.Tk() root.title(u"Software Title") root.geometry("400x300") # 備品表呼び出し workbook = openpyxl.load_workbook('備品表.xlsx') sheet = workbook["Sheet1"] # 備品名リスト作成 suppliers = [] for i in range(3, 21): cell_value = sheet.cell(row=i, column=1).value if cell_value not in suppliers: suppliers.append(cell_value) # 備品名をラベル表示 print(suppliers) a = '\n'.join(suppliers) txt1 = tkinter.Label(root, text=a, font=('Helvetica', '15')) txt1.place(x=20, y=20) # 備品個数リスト作成 transaction_amounts = [] for i in suppliers: transaction_amount = 0 for j in range(3, 21): supplier = sheet.cell(row=j, column=1).value if supplier == i: transaction_amount += sheet.cell(row=j, column=2).value transaction_amounts.append(transaction_amount) print(transaction_amounts) s = str(transaction_amounts) result = re.sub(r"\D", "", s) print(result) print(textwrap.fill(result, 2)) w = textwrap.fill(result, 2) txt2 = tkinter.Label(root, text=w, font=('Helvetica', '15')) txt2.place(x=80, y=20) root.mainloop()

投稿2020/12/04 02:51

MM921

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問