前提・質問したいこと
Python初心者です。
現在Python3(PyCharm)で簡単な在庫システムを作っています。
一枚目の画面から二枚目の画面へ偏移したあと二枚目の画面でスクロールができるようにしたいです。(画面遷移はできていますが,スクロールバー自体はあるもののスクロールができていない状況です)
また,スクロールができた後二枚目画面の「確定」と「Back」と書かれているボタン,「備品名」と「備品個数」と書かれたラベルだけをスクロールせずにとどめるようにしたいです。
発生している問題・エラーメッセージ
下記に示しているのが全文です。
備品の種類を増やしたいので個数記入ページ(2枚目画像)をスクロールできるようにしたいと考えていますが,使用しているのがキャンバスでなくフレームなためかうまくスクロールしてくれません。。。
↓スクロールさせたい部分
# タイトルラベル作成 self.titleLabel1 = tk.Label(self.frame1, text=" 備品名 備品個数 ", font=('Helvetica', '25'))#このラベルをとどめておきたい self.titleLabel1.pack(anchor='nw', expand=True) self.titleLabel2 = tk.Label(self.frame1, text=" マジック赤", font=('Helvetica', '13')) self.titleLabel2.place(relx=0.02,rely=0.1) self.titleLabel3 = tk.Label(self.frame1, text=" マジック青", font=('Helvetica', '13')) self.titleLabel3.place(relx=0.02,rely=0.18) self.titleLabel4 = tk.Label(self.frame1, text=" マジック黒", font=('Helvetica', '13')) self.titleLabel4.place(relx=0.02,rely=0.26) # 備品個数作成 self.titleLabel5 = tk.Label(self.frame1, text=data1, font=('Helvetica', '13')) self.titleLabel5.place(relx=0.29, rely=0.1) self.titleLabel6 = tk.Label(self.frame1, text=data2, font=('Helvetica', '13')) self.titleLabel6.place(relx=0.29, rely=0.18) self.titleLabel7 = tk.Label(self.frame1, text=data3, font=('Helvetica', '13')) self.titleLabel7.place(relx=0.29, rely=0.26) # 必要個数作成 sptxt1 = StringVar() self.sp1 = Spinbox(self.frame1, textvariable=sptxt1, from_=0, to=10, increment=1) self.sp1.place(relx=0.56, rely=0.1) sptxt2 = StringVar() self.sp2 = Spinbox(self.frame1, textvariable=sptxt2, from_=0, to=10, increment=1) self.sp2.place(relx=0.56, rely=0.18) sptxt3 = StringVar() self.sp3 = Spinbox(self.frame1, textvariable=sptxt3, from_=0, to=10, increment=1) self.sp3.place(relx=0.56, rely=0.26)
↓全文
# -*- coding: utf-8 -*- from tkinter import* import tkinter.ttk as ttk try: import tkinter as tk except: import tkinter as tk import datetime class App(tk.Tk): # 呪文 def __init__(self, *args, **kwargs): # 呪文 super().__init__(*args) self.variable = StringVar() # ウィンドウタイトルを決定 self.title("前室在庫") # ウィンドウの大きさを決定 self.geometry("800x600") # ウィンドウのグリッドを 1x1 にする # この処理をコメントアウトすると配置がズレる self.grid_rowconfigure(0, weight=1) self.grid_columnconfigure(0, weight=1) #-----------------------------------main_frame----------------------------- # メインページフレーム作成 self.main_frame = tk.Frame() self.geometry("800x600") self.main_frame.grid(row=0, column=0, sticky="nsew") # タイトルラベル作成 self.titleLabel = tk.Label(self.main_frame, text="↓NAME HERE↓", font=('Franklin Gothic Deni', '25')) self.titleLabel.pack(anchor='s', expand=True) # エントリーボックス作成 self.entryBox = ttk.Entry(master=self.main_frame,width=30,font=('Helvetica', '15')) self.entryBox.pack(anchor='n', expand=True,ipady=15) # フレーム1に移動するボタン self.changePageButton = tk.Button(self.main_frame, text=" G O ",font=('Franklin Gothic Deni', '15'), bg="light goldenrod", command=lambda : self.changePage1(self.frame1)) self.changePageButton.place(relx=0.41,rely=0.6) #-------------------------------------------------------------------------- #-----------------------------------frame1--------------------------------- # 移動先フレーム作成 self.frame1 = tk.Frame() self.frame1.grid(row=0, column=0, sticky="nsew") bar1 = tk.Scrollbar(self.frame1, orient=tk.VERTICAL) bar1.pack(side=tk.RIGHT, fill=tk.Y) bar2 = tk.Scrollbar(self.frame1, orient=tk.HORIZONTAL) bar2.pack(side=tk.BOTTOM, fill=tk.X) # ファイル開封 f1 = open('マジック赤.txt') f2 = open('マジック青.txt') f3 = open('マジック黒.txt') data1 = f1.read() data2 = f2.read() data3 = f3.read() f1.close() f2.close() f3.close() # タイトルラベル作成 self.titleLabel1 = tk.Label(self.frame1, text=" 備品名 備品個数 ", font=('Helvetica', '25')) self.titleLabel1.pack(anchor='nw', expand=True) self.titleLabel2 = tk.Label(self.frame1, text=" マジック赤", font=('Helvetica', '13')) self.titleLabel2.place(relx=0.02,rely=0.1) self.titleLabel3 = tk.Label(self.frame1, text=" マジック青", font=('Helvetica', '13')) self.titleLabel3.place(relx=0.02,rely=0.18) self.titleLabel4 = tk.Label(self.frame1, text=" マジック黒", font=('Helvetica', '13')) self.titleLabel4.place(relx=0.02,rely=0.26) # 備品個数作成 self.titleLabel5 = tk.Label(self.frame1, text=data1, font=('Helvetica', '13')) self.titleLabel5.place(relx=0.29, rely=0.1) self.titleLabel6 = tk.Label(self.frame1, text=data2, font=('Helvetica', '13')) self.titleLabel6.place(relx=0.29, rely=0.18) self.titleLabel7 = tk.Label(self.frame1, text=data3, font=('Helvetica', '13')) self.titleLabel7.place(relx=0.29, rely=0.26) # 必要個数作成 sptxt1 = StringVar() self.sp1 = Spinbox(self.frame1, textvariable=sptxt1, from_=0, to=10, increment=1) self.sp1.place(relx=0.56, rely=0.1) sptxt2 = StringVar() self.sp2 = Spinbox(self.frame1, textvariable=sptxt2, from_=0, to=10, increment=1) self.sp2.place(relx=0.56, rely=0.18) sptxt3 = StringVar() self.sp3 = Spinbox(self.frame1, textvariable=sptxt3, from_=0, to=10, increment=1) self.sp3.place(relx=0.56, rely=0.26) # 備品個数-必要個数ボタン self.kakutei_button = tk.Button(self.frame1, text=" 確 定 ", command=lambda: self.Kakutei(self.main_frame)) self.kakutei_button.pack(anchor='s', expand=True) # フレーム1からmainフレームに戻るボタン self.back_button = tk.Button(self.frame1, text=" Back ", command=lambda : self.changePage2(self.main_frame)) self.back_button.place(relx=0.85, rely=0.01) #-------------------------------------------------------------------------- #main_frameを一番上に表示 self.main_frame.tkraise() # フレーム1に移動するときのアクション def changePage1(self, page): ''' 画面遷移用の関数 ''' page.tkraise() date = datetime.datetime.now() print(date.year, "年", date.month, "月", date.day, "日", date.hour, "時", date.minute, "分", date.second, "秒") print(self.entryBox.get(), "さんこんにちは!") file = "出庫履歴.txt" f4 = open(file, "a", encoding="utf_8") print(date.year, "年", date.month, "月", date.day, "日", date.hour, "時", date.minute, "分", date.second, "秒", file=f4) print(self.entryBox.get(), "さんが入室しました。", file=f4) # メインフレームに移動するときのアクション def changePage2(self, page): ''' 画面遷移用の関数 ''' page.tkraise() print("お疲れさまでした!") file = "出庫履歴.txt" f4 = open(file, "a", encoding="utf_8") print(self.entryBox.get(), "さんが退室しました。", file=f4) def Kakutei(self,Page): f1 = open('マジック赤.txt') data1 = f1.read() f1.close() o = int(data1) p = int(self.sp1.get()) a = o - p self.titleLabel5.destroy() f1 = open('マジック赤.txt', 'w') print(a, file=f1) self.titleLabel10 = tk.Label(self.frame1, text= a, font=('Helvetica', '13')) self.titleLabel10.place(relx=0.29, rely=0.1) f2 = open('マジック青.txt') data2 = f2.read() f2.close() q = int(data2) r = int(self.sp2.get()) b = q - r self.titleLabel6.destroy() f2 = open('マジック青.txt', 'w') print(b, file=f2) self.titleLabel8 = tk.Label(self.frame1, text=b, font=('Helvetica', '13')) self.titleLabel8.place(relx=0.29, rely=0.18) f3 = open('マジック黒.txt') data3 = f3.read() f3.close() s = int(data3) t = int(self.sp3.get()) c = s - t self.titleLabel7.destroy() f3 = open('マジック黒.txt', 'w') print(c, file=f3) self.titleLabel9 = tk.Label(self.frame1, text=c, font=('Helvetica', '13')) self.titleLabel9.place(relx=0.29, rely=0.26) print("残り在庫") print("マジック赤", a, "個", " (-", p, "個)") print("マジック青", b, "個", " (-", r, "個)") print("マジック黒", c, "個", " (-", t, "個)") file = "出庫履歴.txt" f4 = open(file, "a", encoding="utf_8") print("マジック赤", a, "個", " (-", p, "個)", file=f4) print("マジック青", b, "個", " (-", r, "個)", file=f4) print("マジック黒", c, "個", " (-", t, "個)", file=f4) if __name__ == "__main__": app = App() def process_b(): quit() def key(event): if event.char == "@": process_b() app.bind("<Key>", key) app.focus_set() app.mainloop()
試したこと
フレームを使用していることが原因だと考えて自分なりにフレームをキャンバスに入れ替えてもうまくスクロールしてくれませんでした。
Pythonをはじめて日は浅く,知識不足ゆえ何卒ご教示お願い致します。
お手を貸していただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/16 00:47