前提・実現したいこと
tkinterを使って指定した日付のデータを検索して保存するguiを作成してみようと考えています。
発生している問題・エラーメッセージ
.placeを使いウィジェットを配置しようとしたところスピンボックスだけ表示されません。
また新しくウィンドウを作成して.placeでウィジェットを配置しようとしたところそちらではラベルやテキストボックスも表示されせん。
どこか記述の間違いや漏れがあったりしますでしょうか?
よろしくお願いします。
該当のソースコード
python
1import tkinter 2from tkinter import * 3from tkinter import ttk 4import datetime 5import tkinter.filedialog 6import os,sys 7 8class MainMenu(tkinter.Frame): 9 def __init__(self,master): 10 super().__init__(master,width=450,height=400) 11 self.pack() 12 self.master.title('data') 13 self.master.minsize() 14 self.CreateWindow() 15 16 def CreateWindow(self): 17 self.sptxt1=tkinter.StringVar() 18 self.sptxt2=tkinter.StringVar() 19 self.sptxt3=tkinter.StringVar() 20 self.sptxt4=tkinter.StringVar() 21 self.sptxt5=tkinter.StringVar() 22 self.sptxt6=tkinter.StringVar() 23 self.stlbl=tkinter.Label(self,text='from') 24 self.endlbl=tkinter.Label(self,text='to') 25 self.datelbl1=tkinter.Label(self,text='/') 26 self.datelbl2=tkinter.Label(self,text='/') 27 self.styear=tkinter.Spinbox(self,textvariable=self.sptxt1,from_=2021,to=2999,increment=1,state='readonly',width=20) 28 self.stmonth=tkinter.Spinbox(self,textvariable=self.sptxt2,from_=1,to=12,increment=1,state='readonly',width=10) 29 self.stday=tkinter.Spinbox(self,textvariable=self.sptxt3,from_=1,to=31,increment=1,state='readonly',width=10) 30 self.datelbl3=tkinter.Label(self,text='/') 31 self.datelbl4=tkinter.Label(self,text='/') 32 self.endyear=tkinter.Spinbox(self,textvariable=self.sptxt4,from_=2021,to=2999,increment=1,state='readonly',width=20) 33 self.endmonth=tkinter.Spinbox(self,textvariable=self.sptxt5,from_=1,to=12,increment=1,state='readonly',width=10) 34 self.endday=tkinter.Spinbox(self,textvariable=self.sptxt6,from_=1,to=31,increment=1,state='readonly',width=10) 35 36 self.sttime=tkinter.Entry(self,width=20) 37 self.endtime=tkinter.Entry(self,width=20) 38 39 self.stlbl.place(x=10,y=20) 40 self.styear.place(x=40,y=60,width=80,height=30) 41 self.datelbl1.place(x=120,y=60) 42 self.stmonth.place(x=140,y=60,width=60,height=30) 43 self.datelbl2.place(x=200,y=60) 44 self.stday.place(x=220,y=60,width=60,height=30) 45 self.sttime.place(x=300,y=60,width=80,height=30) 46 47 self.endlbl.place(x=10,y=120) 48 self.endyear.place(x=40,y=160,width=80,height=30) 49 self.datelbl3.place(x=120,y=160) 50 self.endmonth.place(x=140,y=160,width=60,height=30) 51 self.datelbl4.place(x=200,y=160) 52 self.endday.place(x=220,y=160,width=60,height=30) 53 self.endtime.place(x=300,y=160,width=80,height=30) 54 55 self.button1=ttk.Button( 56 text='OK', 57 padding=(20,5), 58 command=self.getText) 59 self.button2=ttk.Button( 60 text='cancel', 61 padding=(20,5), 62 command=self.quitWindow) 63 64 self.button1.place(x=300,y=240) 65 self.button2.place(x=300,y=270) 66 67 self.inputRule() 68 69 def inputRule(self): 70 self.var1=tkinter.StringVar() 71 self.stlbl["font"]=("",20) 72 self.styear["font"]=("",20) 73 self.stmonth["font"]=("",20) 74 self.stday["font"]=("",20) 75 self.datelbl1["font"]=("",20) 76 self.datelbl2["font"]=("",20) 77 self.var1.set("00:00") 78 self.sttime["text"]=self.var1 79 self.sttime["font"]=("",20) 80 81 self.var2=tkinter.StringVar() 82 self.endlbl["font"]=("",20) 83 self.endyear["font"]=("",20) 84 self.endmonth["font"]=("",20) 85 self.endday["font"]=("",20) 86 self.datelbl3["font"]=("",20) 87 self.datelbl4["font"]=("",20) 88 self.var2.set("23:59") 89 self.endtime["text"]=self.var2 90 self.endtime["font"]=("",20) 91 def getText(self): 92 date1=self.styear.get()+ '/'+ self.stmonth.get()+ '/'+ self.stday.get()+ ' '+self.sttime.get() 93 date2=self.endyear.get()+ '/'+self.endmonth.get()+ '/'+ self.endday.get()+' '+self.endtime.get() 94 #data_output(date1,date2) 95 self.CreateNewWindow() 96 97 def quitWindow(self): 98 self.master.destroy() 99 100 101 102 def CreateNewWindow(self): 103 win2=tkinter.Toplevel(self.master) 104 app=NewWindow(win2) 105 win2.attributes('-topmost',True) 106 win2.grab_set() 107 108 109class NewWindow(tkinter.Frame): 110 def __init__(self,master): 111 112 super().__init__(master,width=400,height=200) 113 self.pack() 114 self.master.title('save') 115 116 self.create_save() 117 118 def create_save(self): 119 120 self.save_path=tkinter.Entry(self,width=20) 121 self.save_path.place(x=10,y=10,height=30,width=210) 122 self.path_button=ttk.Button( 123 self, 124 text='フォルダーの選択', 125 padding=(20,5), 126 command=self.GetPath) 127 self.path_button.place(x=230,y=10) 128 self.file_name=tkinter.Entry(self,width=20) 129 self.file_name.place(x=10,y=50,height=30,width=210) 130 self.file_name_tag=tkinter.Label(self,text="ファイル名") 131 self.file_name_tag.place(x=230,y=50) 132 self.file_save_button=ttk.Button( 133 self, 134 text='保存', 135 padding=(20,5), 136 command=self.file_save) 137 self.file_save_button.place(x=165,y=100) 138 self.button5=ttk.Button( 139 self, 140 text='cancel', 141 padding=(20,5), 142 command=self.quitWindow2) 143 self.button5.place(x=280,y=100) 144 145 def GetPath(self): 146 self.dir = 'C:\' 147 self.fld = tkinter.filedialog.askdirectory(initialdir = self.dir) 148 self.var=tkinter.StringVar() 149 self.var.set(self.fld) 150 self.save_path["text"]=self.var 151 152 def file_save(self): 153 self.file_path_name=self.save_path.get()+'/'+self.file_name.get()+'.csv' 154 print(self.file_path_name) 155 156 def quitWindow2(self): 157 self.master.destroy() 158 159 160def main(): 161 root=tkinter.Tk() 162 app=MainMenu(master=root) 163 app.mainloop() 164 165if __name__=="__main__": 166 main()
試したこと
https://teratail.com/questions/188436
こちらの質問に似た症状だったたため試してみたのですが表示は変わらすでした。
補足情報(FW/ツールのバージョンなど)
ウィンドウを表示するコードになります。
データを検索するプログラムをCreateWindowのクラス内に入れていたのですが、そちらを削除したところスピンボックスの方は表示されるようになりました。
visualstudioの方で編集実行していたのですが、pythonから実行したところスピンボックスの方は一つも表示されないという状態です。
新しく開くウィンドウの方は無事表示されるようになりました。
回答2件
あなたの回答
tips
プレビュー