我到了这一步,但是我想让build_report
在应用程序的右侧,紧挨其他框架,并能够在窗口大小改变时自动调整其大小。
有人可以给我建议如何实现它吗?
from tkinter import *
import os,subprocess
from tkinter import ttk
import tkinter as tk
class ScrolledFrame(tk.Frame):
def __init__(self,parent,vertical=True,horizontal=True):
super().__init__(parent)
# canvas for inner frame
self._canvas = tk.Canvas(self)
self._canvas.grid(row=0,column=0,sticky='news') # changed
# create right scrollbar and connect to canvas Y
self._vertical_bar = tk.Scrollbar(self,orient='vertical',command=self._canvas.yview)
if vertical:
self._vertical_bar.grid(row=0,column=1,sticky='ns')
self._canvas.configure(yscrollcommand=self._vertical_bar.set)
# create bottom scrollbar and connect to canvas X
self._horizontal_bar = tk.Scrollbar(self,orient='horizontal',command=self._canvas.xview)
if horizontal:
self._horizontal_bar.grid(row=1,sticky='we')
self._canvas.configure(xscrollcommand=self._horizontal_bar.set)
# inner frame for widgets
self.inner = tk.Frame(self._canvas)
self._window = self._canvas.create_window((0,0),window=self.inner,anchor='nw')
# autoresize inner frame
self.columnconfigure(0,weight=1) # changed
self.rowconfigure(0,weight=1) # changed
# resize when configure changed
self.inner.bind('<Configure>',self.resize)
# resize inner frame to canvas size
self.resize_width = False
self.resize_height = False
self._canvas.bind('<Configure>',self.inner_resize)
def resize(self,event=None):
self._canvas.configure(scrollregion=self._canvas.bbox('all'))
def inner_resize(self,event):
# resize inner frame to canvas size
if self.resize_width:
self._canvas.itemconfig(self._window,width=event.width)
if self.resize_height:
self._canvas.itemconfig(self._window,height=event.height)
managment = ["main","nav","output","outputspare","gateway","sync1","sync2","storinator"]
thirdrack = ["recon01","recon02","recon03","recon04","recon05","recon06","recon07","recon08","recon09","recon10","recon11","recon12","render01","render02"]
FGCs =["fgc01","fgc02","fgc03","fgc04","fgc05","fgc06","fgc07","fgc08","fgc09","fgc10","fgc11","fgc12","fgc13","fgc14","fgc15","fgc16","fgc17","fgc18","fgc19","fgc20","fgc21","fgc22","fgc23","fgc24","fgc25","fgc26","fgc27","fgc28","fgc29","fgc30","fgc31","fgc32","fgc33","fgc34","fgc35","fgc36","fgc37","fgc38","fgcspare1","fgcspare2","fgcspare3","fgcspare4"]
tests = ["Network","GPU","Time","Gidel","snapshot","Disks"]
testbuttons = []
serverbuttons = []
managebuttons = []
fgcbuttons = []
thirdbuttons = []
f=open(os.devnull,'w')
class mainwindow(tk.Frame):
def __init__(self,master,*args,**kwargs):
self.master = master
super().__init__(master,**kwargs)
master.title("System Report Tool")
master.geometry("1000x700")
self.reportnotebook = ttk.Notebook(root)
self.build_tests()
self.build_manage()
self.build_fgcs()
self.build_third()
self.build_report()
def build_tests(self):
self.Tests = ttk.LabelFrame(root,text=" Tests")
self.Tests.pack(expand="no",anchor=W,pady=10,padx=10)
for test in tests:
testcheck = ttk.Checkbutton(self.Tests,text=test)
testcheck.pack(side=LEFT,anchor="w")
testbuttons.append(testcheck)
def select_tests():
for test in testbuttons:
test.invoke()
selecttests = ttk.Checkbutton(root,command=select_tests)
selecttests.place(x=0,y=7)
selecttests.invoke()
selecttests.invoke()
def build_manage(self):
self.Managment = ttk.LabelFrame(root,text=" Managment")
self.Managment.configure(width=10,height=20)
self.Managment.pack(expand="no",padx=10,pady=10)
rowno = 0
columnno = 0
for manage in managment:
if columnno >= 6:
rowno += 1
columnno = 0
# pingresponse=subprocess.call(['ping','-n','1','-w',manage],# stdout=f,# stderr=subprocess.STDOUT)
pingresponse = 0
if pingresponse == 0:
managecheck = ttk.Checkbutton(self.Managment,text=manage)
managecheck.grid(row=rowno,column=columnno,sticky='w')
columnno += 1
managebuttons.append(managecheck)
else:
managecheck = ttk.Checkbutton(self.Managment,sticky='w')
columnno += 1
managecheck.config(state=DISABLED)
else:
pingresponse = 0
if pingresponse == 0:
managecheck = ttk.Checkbutton(self.Managment,sticky='w')
columnno += 1
managebuttons.append(managecheck)
else:
managecheck = ttk.Checkbutton(self.Managment,sticky='w')
columnno += 1
managecheck.config(state=DISABLED)
def select_manage():
for manage in managebuttons:
manage.invoke()
selectmanage = ttk.Checkbutton(root,command=select_manage)
selectmanage.place(x=0,y=68)
selectmanage.invoke()
selectmanage.invoke()
def build_fgcs(self):
self.FGCs = ttk.LabelFrame(root,text=" FGCs")
self.FGCs.configure(width=10,height=20)
self.FGCs.pack(expand="no",pady=10)
rowno = 0
columnno = 0
for fgc in FGCs:
if columnno >= 6:
rowno += 1
columnno = 0
#pingresponse=subprocess.call(['ping',fgc],# stdout=f,# stderr=subprocess.STDOUT)
pingresponse = 0
if pingresponse == 0:
fgccheck = ttk.Checkbutton(self.FGCs,text=fgc)
fgccheck.grid(row=rowno,sticky='w')
columnno += 1
fgcbuttons.append(fgccheck)
else:
fgccheck = ttk.Checkbutton(self.FGCs,sticky='w')
columnno += 1
fgccheck.config(state=DISABLED)
else:
#pingresponse=subprocess.call(['ping',sticky='w')
columnno += 1
fgccheck.config(state=DISABLED)
def select_fgc():
for fgc in fgcbuttons:
fgc.invoke()
selectfgc = ttk.Checkbutton(root,command=select_fgc)
selectfgc.place(x=0,y=148)
selectfgc.invoke()
selectfgc.invoke()
def build_third(self):
self.thirdrack = ttk.LabelFrame(root,text=" 3rd Rack")
self.thirdrack.configure(width=25,height=20)
self.thirdrack.pack(expand="no",pady=10)
rowno = 0
columnno = 0
for thirdserver in thirdrack:
if columnno >= 6:
rowno += 1
columnno = 0
# pingresponse=subprocess.call(['ping',thirdserver],# stderr=subprocess.STDOUT)
pingresponse = 0
if pingresponse == 0:
thirdcheck = ttk.Checkbutton(self.thirdrack,text=thirdserver)
thirdcheck.grid(row=rowno,sticky='w')
columnno += 1
thirdbuttons.append(thirdcheck)
else:
thirdcheck = ttk.Checkbutton(self.thirdrack,sticky='w')
columnno += 1
thirdcheck.config(state=DISABLED)
else:
pingresponse = 0
if pingresponse == 0:
thirdcheck = ttk.Checkbutton(self.thirdrack,sticky='w')
columnno += 1
thirdcheck.config(state=DISABLED)
def select_third():
for thirdserver in thirdbuttons:
thirdserver.invoke()
selectthird = ttk.Checkbutton(root,command=select_third)
selectthird.place(x=0,y=335)
selectthird.invoke()
selectthird.invoke()
def build_report(self):
self.TAB_CONTROL = ttk.Notebook(root)
self.TAB1 = ttk.Frame(self.TAB_CONTROL)
self.TAB2 = ttk.Frame(self.TAB_CONTROL)
self.TAB_CONTROL.add(self.TAB1,text='Tab 1')
self.TAB_CONTROL.add(self.TAB2,text='Tab 2')
self.sf1 = ScrolledFrame(self.TAB1)
self.sf1.pack(fill='y',expand=True)
self.sf2 = ScrolledFrame(self.TAB2)
self.sf2.pack(fill='y',expand=True)
self.TAB_CONTROL.pack(expand='y',fill='both')
rowno = 0
for i in range(0,40):
ttk.Label(self.sf1.inner,text="This is Tab 1").grid(column=rowno,row=rowno,pady=0)
ttk.Label(self.sf2.inner,text="This is Tab 2").grid(column=rowno,pady=0)
rowno += 1
root = tk.Tk()
Window = mainwindow(root)
root.mainloop()