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

質問編集履歴

1

コードの追加

2021/04/08 04:11

投稿

MM921
MM921

スコア14

title CHANGED
File without changes
body CHANGED
@@ -10,4 +10,184 @@
10
10
  - ▼を押してspinboxの値が0になったとき → False(textを消す)
11
11
 
12
12
  上記のように,同じ1でも増加によるものと減少によるものとでイベントを起こせるかを知りたいです。
13
- また,そのようなオプションがない場合は同様の動作がどのようにできるか知りたいです。
13
+ また,そのようなオプションがない場合は同様の動作がどのようにできるか知りたいです。
14
+
15
+ ※以下は実際に使用しているコードです。
16
+ ```ここに言語を入力
17
+ # -*- coding: utf-8 -*-
18
+ import tkinter
19
+ import openpyxl
20
+ from tkinter import ttk
21
+ from tkinter import *
22
+
23
+ try:
24
+ import tkinter as tk
25
+ except:
26
+ import tkinter as tk
27
+ import tkinter.scrolledtext as st
28
+
29
+ # ウィンドウの作成
30
+ window = tkinter.Tk()
31
+ window.geometry("1358x750")
32
+ window.title("Screen Transition")
33
+
34
+ # 遷移前の画面の作成(画面1)
35
+ canvas1 = tkinter.Canvas(bd=0, width=1366, height=768)
36
+ canvas1.place(x=0, y=0) # キャンバス
37
+ titleLabel1 = tk.Label(canvas1, text=" ※@で画面を閉じる ", font=('Helvetica', '13'), fg='gray8')
38
+ titleLabel1.place(relx=0.85, rely=0.01)
39
+ titleLabel2 = tkinter.Label(canvas1, text="こんにちは。前室在庫管理システムです。", font=('BIZ UDゴシック', '25', 'bold'), bg="misty rose",
40
+ fg='firebrick4') # テキスト
41
+ titleLabel2.place(relx=0.29, rely=0.25)
42
+ titleLabel3 = tkinter.Label(canvas1, text="下記ボックスにカーソルを置いて,別紙の社員QRコードをかざしてログインしてください。", font=('BIZ UDゴシック', '15'),
43
+ fg='gray4') # テキスト
44
+ titleLabel3.place(relx=0.23, rely=0.35)
45
+ titleLabel4 = tkinter.Label(canvas1, text="↓Name Here↓", font=('BIZ UDゴシック', '23'), fg='gray4') # テキスト
46
+ titleLabel4.place(relx=0.42, rely=0.42)
47
+ button = tkinter.Button(canvas1, text=" Go ", font=('BIZ UDゴシック', '15'),
48
+ command=lambda: transition_button1(canvas1), fg='gray4') # 遷移ボタン
49
+ button.place(relx=0.45, rely=0.53)
50
+ entry1 = tkinter.Entry(canvas1, font=('Helvetica', '20')) # エントリーボックス
51
+ entry1.place(relx=0.39, rely=0.47)
52
+
53
+
54
+ # button実行結果
55
+ def transition_button1(widget):
56
+ widget.place_forget() # canvas(widget)を隠す
57
+ global entry1
58
+
59
+ # 遷移後の画面の作成(画面2)
60
+ canvas2 = tkinter.Canvas(bd=0, width=1366, height=1500) # キャンバス
61
+ canvas2.place(x=0, y=0)
62
+
63
+ # Top Widget上に Scrollbar を生成して配置
64
+ bar = tk.Scrollbar(window, orient=tk.VERTICAL)
65
+ bar.pack(side=tk.RIGHT, fill=tk.Y)
66
+
67
+ # Scrollbarの設定
68
+ bar.config(command=canvas2.yview) # ScrollbarでCanvasを制御
69
+
70
+ # Canvas Widget をTopWidget上に配置
71
+ canvas2.config(yscrollcommand=bar.set) # Canvasのサイズ変更をScrollbarに通知
72
+ canvas2.config(scrollregion=(0, 0, 4800, 4800)) # スクロール範囲
73
+ canvas2.bind_all("<MouseWheel>", lambda eve: canvas2.yview_scroll(int(-eve.delta / 120), 'units'))
74
+ canvas2.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
75
+
76
+ # Frame Widgetを 生成
77
+ frame = tk.Frame(canvas2)
78
+
79
+ # Frame Widgetを Canvas Widget上に配置()
80
+ canvas2.create_window((0, 0), window=frame, anchor=tk.NW, width=1366, height=4800)
81
+
82
+ # ブックを取得
83
+ book = openpyxl.load_workbook(r'C:\Users\mn-manabe\PycharmProjects\sample2Project\一覧備品.xlsx')
84
+ sheet = book['Sheet1']
85
+ titleLabel_1 = tk.Label(canvas2, text=" 出庫したい備品の個数を指定して「出庫」ボタンを押してください。 ",
86
+ font=('BIZ UDゴシック', '15'), bg="misty rose", fg='gray4')
87
+ titleLabel_1.place(relx=0.43, rely=0.018) # これはとどめておく
88
+ t0 = st.Text(width=90, height=40)
89
+ t0.place(relx=0.48, rely=0.13)
90
+ NameLabel = tkinter.Label(canvas2, text=entry1.get() + 'さんがログイン中です', font=('BIZ UDゴシック', '12'), fg='red')
91
+ NameLabel.place(relx=0.43, rely=0.08)
92
+ kakutei_button = tk.Button(canvas2, text=" 出 庫 ", font=('BIZ UDゴシック', '13'), fg='red',
93
+ command=lambda: Kakutei(canvas2))
94
+ kakutei_button.place(relx=0.65, rely=0.87)
95
+ Daimei_Label = tk.Label(canvas2, text="備品名 総個数 必要個数",
96
+ font=('BIZ UDゴシック', '20'), fg='maroon')
97
+ Daimei_Label.place(relx=0.03, rely=0.01)
98
+ # Body
99
+ f1 = open('excel行数.txt', 'w')
100
+ print(sheet.max_row, file=f1)
101
+ f1.close()
102
+ f1 = open('excel行数.txt')
103
+ data1 = f1.read()
104
+ item1 = []
105
+ for cell in sheet['A']:
106
+ item1.append(cell.value)
107
+ item2 = []
108
+ for cell in sheet['B']:
109
+ item2.append(cell.value)
110
+ spinboxes = []
111
+ spinbox_values = []
112
+ for x in range(int(data1)):
113
+ # name
114
+ n = Label(frame, text=item1[x], font=('BIZ UDゴシック', '12'))
115
+ n.place(x=50, y=36 * int(x) + 40)
116
+ # namevalue
117
+ v = Label(frame, text=item2[x], font=('BIZ UDゴシック', '12'))
118
+ v.place(x=265, y=36 * int(x) + 40)
119
+ val = StringVar()
120
+ val.set('0')
121
+ s = ttk.Spinbox(
122
+ frame,
123
+ format='%1.0f',
124
+ state='readonly',
125
+ textvariable=val,
126
+ from_=0,
127
+ to=5,
128
+
129
+ )
130
+ s.place(x=365, y=36 * int(x) + 40)
131
+ spinbox_values.append(val)
132
+ spinboxes.append(val)
133
+
134
+ print(spinboxes)
135
+ def onIncrement():
136
+ print('増')
137
+ sp = [int(s.get()) for s in spinboxes]
138
+ print(sp)
139
+ for x in range(int(data1)):
140
+ if sp[x] > 0:
141
+ itemname = sheet.cell(row=x + 1, column=1).value
142
+ itemvalue = sheet.cell(row=x + 1, column=2).value
143
+ if sp[x] == 1:
144
+ t0.insert(tk.END, '{}:'.format(itemname))
145
+ t0.insert(tk.END, '{}\n'.format(itemvalue))
146
+ def onDecrement(event):
147
+ print('減')
148
+ sp = [int(s.get()) for s in spinboxes]
149
+ print(sp)
150
+ for x in range(int(data1)):
151
+ if sp[x] > 0:
152
+ itemname = sheet.cell(row=x + 1, column=1).value
153
+ itemvalue = sheet.cell(row=x + 1, column=2).value
154
+ if sp[x] == 1:
155
+ pass
156
+
157
+
158
+ s.bind("<<Increment>>", onIncrement)
159
+ s.bind("<<Decrement>>", onDecrement)
160
+
161
+ def Kakutei(widget):
162
+ sp = [int(s.get()) for s in spinboxes]
163
+ for x in range(int(data1)):
164
+ if sp[x] > 0:
165
+ itemvalue = sheet.cell(row=x + 1, column=2).value
166
+ total = itemvalue - sp[x]
167
+ sheet.cell(row=x + 1, column=2).value = total
168
+ book.save(r'C:\Users\mn-manabe\PycharmProjects\sample2Project\一覧備品.xlsx')
169
+ book.close()
170
+
171
+ def transition_button2(widget):
172
+ canvas2.pack_forget()
173
+ bar.destroy()
174
+ canvas1.place(x=0, y=0) # キャンバス
175
+
176
+
177
+ if __name__ == "__main__":
178
+ # @で画面を閉じる
179
+ def process_b():
180
+ sys.exit()
181
+
182
+
183
+ def key(event):
184
+ if event.char == "@":
185
+ process_b()
186
+
187
+
188
+ window.bind("<Key>", key)
189
+ window.focus_set()
190
+
191
+ window.mainloop()
192
+
193
+ ```