題名通り率直な質問になってしまいますが,お手柔らかにお願いいたします。
私は今,Excelを連動させた在庫管理GUIを作っています。
この時pythonにおけるspinboxのオプションを調べていましたが,spinboxの▲▼(アップダウン)ごとにイベントが発生するといったオプションが見つかりませんでした。
実際に行いたい動作の条件例は以下2つの通りです。
- ▲を押してspinboxの値が1になったとき → True(text表示)
- ▼を押してspinboxの値が1になったとき → False(text表示しない)
- ▼を押してspinboxの値が0になったとき → False(textを消す)
上記のように,同じ1でも増加によるものと減少によるものとでイベントを起こせるかを知りたいです。
また,そのようなオプションがない場合は同様の動作がどのようにできるか知りたいです。
※以下は実際に使用しているコードです。
# -*- coding: utf-8 -*- import tkinter import openpyxl from tkinter import ttk from tkinter import * try: import tkinter as tk except: import tkinter as tk import tkinter.scrolledtext as st # ウィンドウの作成 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) entry1 = tkinter.Entry(canvas1, font=('Helvetica', '20')) # エントリーボックス entry1.place(relx=0.39, rely=0.47) # 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, 4800, 4800)) # スクロール範囲 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=4800) # ブックを取得 book = openpyxl.load_workbook(r'C:\Users\mn-manabe\PycharmProjects\sample2Project\一覧備品.xlsx') sheet = book['Sheet1'] titleLabel_1 = tk.Label(canvas2, text=" 出庫したい備品の個数を指定して「出庫」ボタンを押してください。 ", font=('BIZ UDゴシック', '15'), bg="misty rose", fg='gray4') titleLabel_1.place(relx=0.43, rely=0.018) # これはとどめておく t0 = st.Text(width=90, height=40) t0.place(relx=0.48, rely=0.13) NameLabel = tkinter.Label(canvas2, text=entry1.get() + 'さんがログイン中です', font=('BIZ UDゴシック', '12'), fg='red') NameLabel.place(relx=0.43, rely=0.08) kakutei_button = tk.Button(canvas2, text=" 出 庫 ", font=('BIZ UDゴシック', '13'), fg='red', command=lambda: Kakutei(canvas2)) kakutei_button.place(relx=0.65, rely=0.87) Daimei_Label = tk.Label(canvas2, text="備品名 総個数 必要個数", font=('BIZ UDゴシック', '20'), fg='maroon') Daimei_Label.place(relx=0.03, rely=0.01) # Body f1 = open('excel行数.txt', 'w') print(sheet.max_row, file=f1) f1.close() f1 = open('excel行数.txt') data1 = f1.read() item1 = [] for cell in sheet['A']: item1.append(cell.value) item2 = [] for cell in sheet['B']: item2.append(cell.value) spinboxes = [] spinbox_values = [] for x in range(int(data1)): # name n = Label(frame, text=item1[x], font=('BIZ UDゴシック', '12')) n.place(x=50, y=36 * int(x) + 40) # namevalue v = Label(frame, text=item2[x], font=('BIZ UDゴシック', '12')) v.place(x=265, y=36 * int(x) + 40) val = StringVar() val.set('0') s = ttk.Spinbox( frame, format='%1.0f', state='readonly', textvariable=val, from_=0, to=5, ) s.place(x=365, y=36 * int(x) + 40) spinbox_values.append(val) spinboxes.append(val) print(spinboxes) def onIncrement(): print('増') sp = [int(s.get()) for s in spinboxes] print(sp) for x in range(int(data1)): if sp[x] > 0: itemname = sheet.cell(row=x + 1, column=1).value itemvalue = sheet.cell(row=x + 1, column=2).value if sp[x] == 1: t0.insert(tk.END, '{}:'.format(itemname)) t0.insert(tk.END, '{}\n'.format(itemvalue)) def onDecrement(event): print('減') sp = [int(s.get()) for s in spinboxes] print(sp) for x in range(int(data1)): if sp[x] > 0: itemname = sheet.cell(row=x + 1, column=1).value itemvalue = sheet.cell(row=x + 1, column=2).value if sp[x] == 1: pass s.bind("<<Increment>>", onIncrement) s.bind("<<Decrement>>", onDecrement) def Kakutei(widget): sp = [int(s.get()) for s in spinboxes] for x in range(int(data1)): if sp[x] > 0: itemvalue = sheet.cell(row=x + 1, column=2).value total = itemvalue - sp[x] sheet.cell(row=x + 1, column=2).value = total book.save(r'C:\Users\mn-manabe\PycharmProjects\sample2Project\一覧備品.xlsx') book.close() def transition_button2(widget): canvas2.pack_forget() bar.destroy() canvas1.place(x=0, y=0) # キャンバス if __name__ == "__main__": # @で画面を閉じる def process_b(): sys.exit() def key(event): if event.char == "@": process_b() window.bind("<Key>", key) window.focus_set() window.mainloop()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/08 04:09
2021/04/08 05:12