前提・実現したいこと
在庫管理アプリを作ろうとしています。
一度完成はさせましたが,コードの修正が簡単になるように簡素化しようとしています。
表示させる予定の備品名と個数をExcelの表にまとめており,その表から列ごとラベルでpack()表示しようと試みましたが置きたい場所に縦表示することができません。(これまで一つずつ表示していた)
お力添えいただけると幸いです。
以下が理想図です。(一度完成させたものです)
発生している問題
canvasを用いての画面遷移後,上記画像の備品名と備品個数のように表示させたいのですがpack()のanchorを用いて表示すると備品名の上に縦積みになってしまいます。
縦積みではなく,備品名と備品個数が並んで表示されるようにしたいです。(コード中のAall1とAall2のことです)
該当のコードとexcelファイル
# -*- coding: utf-8 -*- import tkinter try:import tkinter as tk except:import tkinter as tk from tkinter import messagebox import pandas as pd import openpyxl # ウィンドウの作成 window = tkinter.Tk() window.geometry("1358x750") window.title("Screen Transition") # 遷移前の画面の作成(画面1) canvas1 = tkinter.Canvas(bd=0, width=1366, height=768) canvas1.place(x=0, y=0) # キャンバス titleLabel1 = tk.Label(canvas1, text=" ※@で画面を閉じる ", font=('Helvetica', '13'), fg='gray8') titleLabel1.place(relx=0.85, rely=0.01) titleLabel2 = tkinter.Label(canvas1, text="こんにちは。前室在庫管理システムです。", font=('BIZ UDゴシック', '25', 'bold'), bg="misty rose", fg='firebrick4') # テキスト titleLabel2.place(relx=0.29, rely=0.25) titleLabel3 = tkinter.Label(canvas1, text="下記ボックスにカーソルを置いて,別紙の社員QRコードをかざしてログインしてください。", font=('BIZ UDゴシック', '15'), fg='gray4') # テキスト titleLabel3.place(relx=0.23, rely=0.35) titleLabel4 = tkinter.Label(canvas1, text="↓Name Here↓", font=('BIZ UDゴシック', '23'), fg='gray4') # テキスト titleLabel4.place(relx=0.42, rely=0.42) button = tkinter.Button(canvas1, text=" Go ", font=('BIZ UDゴシック', '15'), command=lambda: transition_button1(canvas1), fg='gray4') # 遷移ボタン button.place(relx=0.45, rely=0.53) # button実行結果 def transition_button1(widget): widget.place_forget() # canvas(widget)を隠す global entry1 # 遷移後の画面の作成(画面2) canvas2 = tkinter.Canvas(bd=0, width=1366, height=1500) # キャンバス canvas2.place(x=0, y=0) # Top Widget上に Scrollbar を生成して配置 bar = tk.Scrollbar(window, orient=tk.VERTICAL) bar.pack(side=tk.RIGHT, fill=tk.Y) # Scrollbarの設定 bar.config(command=canvas2.yview) # ScrollbarでCanvasを制御 # Canvas Widget をTopWidget上に配置 canvas2.config(yscrollcommand=bar.set) # Canvasのサイズ変更をScrollbarに通知 canvas2.config(scrollregion=(0, 0, 7000, 7000)) # スクロール範囲 canvas2.bind_all("<MouseWheel>", lambda eve: canvas2.yview_scroll(int(-eve.delta / 120), 'units')) canvas2.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) # Frame Widgetを 生成 frame = tk.Frame(canvas2) # Frame Widgetを Canvas Widget上に配置() canvas2.create_window((0, 0), window=frame, anchor=tk.NW, width=1366, height=7000) # ブックを取得 book = openpyxl.load_workbook(r'C:\Users\mn-manabe\PycharmProjects\sample2Project\一覧備品.xlsx') # シートを取得 sheet = book['Sheet1'] # A1からC7まで(すべて)のセルの値を「行ごと」に取得 print("--- すべての値(行ごと)を取得 ---") for row in sheet.iter_rows(min_row=1, max_col=1, max_row=sheet.max_row, values_only=True): print(row) row1 = '\n'.join(row) Aall1 = tkinter.Label(frame, text=row, font=('メイリオ', '15'), bg='pink', width=30, anchor="w") Aall1.pack(anchor='nw') for row in sheet.iter_rows(min_row=1, max_col=2, min_col=2, max_row=sheet.max_row, values_only=True): print(row) Aall2 = tkinter.Label(frame, text=row, font=('メイリオ', '15'), bg='pink', width=30, anchor="e") Aall2.pack(anchor='n') window.mainloop()
以下が表示させたい表です。
↓一覧部品.xlsx
備品名 | 個数 |
---|---|
a | 500 |
b | 500 |
c | 500 |
e | 500 |
f | 500 |
g | 500 |
### 試したこと | |
Aall1とAall2がExcelの表のように縦表示されたいためpack()のanchorとtopを使って自分なりに試してみましたがどうしても並んでくれませんでした… | |
また画面遷移はスクロールバーが使用可能なcanvasを使っています。 | |
frameを用いてAall1とAall2を表示はできましたがスクロールができないため断念しました。 |
python初学者なため至らない点が多々あると思いますがご教示お願い致します。
※掲載ミスにより再掲
回答1件
あなたの回答
tips
プレビュー