実現したいこと
openpyxlで読み込んだExcelファイルをTkinterのcanvasに表示する.
その際,セルごとに自動で改行するようにしたい.
前提
canvas.create_textを使って複数行のエクセルの中身を表示しようとするとすべて同じ座標に表示されて重なってしまいます.
発生している問題・エラーメッセージ
該当のソースコード
python
1import tkinter 2import openpyxl 3 4class Application(tkinter.Tk): 5 def __init__(self): 6 super().__init__() 7 8 # キャンバスのサイズ 9 self.canvas_width = 850 10 self.canvas_height = 490 11 12 self.after_canvas = tkinter.Canvas( 13 self, 14 width=self.canvas_width, 15 height=self.textcanvas_height, 16 bg="white" 17 ) 18 self.after_canvas.grid(row=2, column=1) 19 yscroll = tkinter.Scrollbar(self, orient=tkinter.VERTICAL, command=self.after_canvas.yview) 20 self.after_canvas["yscrollcommand"] = yscroll.set 21 yscroll.grid(row=2, column=2, sticky=tkinter.N+tkinter.S) 22 23 # ボタンを配置するフレームの作成と配置 24 self.button_frame = tkinter.Frame() 25 self.button_frame.grid(row=1, column=3) 26 27 # ファイル読み込みボタンの作成と配置 28 self.load_button = tkinter.Button( 29 self.button_frame, 30 text="load", 31 command=self.push_load_button 32 ) 33 self.load_button.pack(pady=10, ipady=10, ipadx=20) 34 35 #以下openpyxlの処理 36 def push_load_button(self): 37 wb = openpyxl.load_workbook('\test.xlsx') 38 active_sheet = wb.active 39 sheet_range = active_sheet['B2':'B4'] 40 41 # 範囲内のテキストを順次表示 42 for row in sheet_range: 43 for cell in row: 44 cell_value = cell.value 45 if cell.value is not None: # 改行できない 46 self.after_canvas.create_text(200, 30, text=cell.value + "\n", anchor="nw", fill="black", font=20) 47 48 49app = Application() 50app.mainloop()
試したこと
座標を固定してしまっていることは分かるのですがそれがいい感じに重ならないようにする方法が知りたいです.よろしくお願いいたします.
回答1件
あなたの回答
tips
プレビュー